热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#制作Java+Mysql+Tomcat环境安装程序,一键式安装教程

本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQLServer5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld--installMySQL5命令。


原文:
C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装

要求:



  1. JDK、Mysql、Tomcat三者制作成一个安装包,


  2. 不能单独安装,安装过程不显示三者的界面,


  3. 安装完成要配置好JDK环境、Mysql服务、Tomcat 服务

目的:



  1. 解决客户在安装软件的复杂配置和繁琐


  2. 便于管理软件版本


  3. 便于系统集成

分析:

由于不能使用软件的原始安装版本,故只能将JDK的安装目录拷贝出来,放在D盘的SoftSource文件夹,由于要管理三者,将这三个放进一个文件夹里面

Mysql、Tomcat只能用解压版,要让软件运行起来,要做的事情如下:



  1. 配置JDK环境变量

这一步很重要,否则后面的Tomcat将不能正确运行,

2、安装Mysql服务,我用的是MySQL Server 5.5社区版、解压目录下面有my.ini文件,或者先将mysql安装,然后拷贝安装目录文件,目录结构不能变,安装方法是 用命令行将目录转到mysql的bin目录下,mysqld --install MySQL5 --defaults-file="C:\Program Files\MySQL\MySQL Server 5.5\my.ini"   注意=后面就是你的mysql安装目录下的ini文件路径(可先行在cmd下测试安装,若可以,删除服务的只要将前面的安装语句里面的install改成uninstall)

难点在my.ini文件里面的datadir="D:/ProgramData/MySQL/MySQL Server 5.5/Data/"(数据安装目录)

                                                  basedir="D:/Program Files/MySQL/MySQL Server 5.5/" (软件安装目录)

需要与你的实际目录对应,否则会失败,另外要根据选择不同路径,该路径要可以跟着改变

3、安装Tomcat服务是要执行bin目录下面的service.bat文件用法命令行将目录的转到你的Tomcat 下的bin目录安装语句是

service.bat   install 卸载 为service.bat  uninstall 主要事项(bat文件必须要在当前目录执行,就是命令行的路径必须要转到bat文件的目录,另外需要JAVA_HOME环境变量,还有CATALINA_HOME环境变量(就是要将Tomcat安装目录加到环境变量))

 

思路清晰了,接着就是代码实现了,(先实现JDK和Mysql )

vs2008 新建 C#类库项目,添加组件Installer1.cs(安装组件)命名为MyInstallerClassDll

重写安装方法(安装前、安装、安装后)附上代码:


using


System

;

using


System

.

Collections

;

using


System

.

Collections

.

Generic

;

using


System

.

ComponentModel

;

using


System

.

Configuration

.

Install

;

using


System

.

Windows

.

Forms

;

using


System

.

IO

;

using


System

.

Text

;

using


System

.

Diagnostics

;

namespace


CustomAction

{
[

RunInstaller

(

true

)]
public partial class


MyInstallerClassDll

:

Installer

{


public


MyInstallerClassDll

()
{


InitializeComponent

();
}


protected override void


OnBeforeInstall

(

IDictionary


savedState

)
{


string


server

=

this

.

Context

.

Parameters

[

"server"

];


string


user

=

this

.

Context

.

Parameters

[

"user"

];


base

.

OnBeforeInstall

(

savedState

);
}


public override void


Install

(

IDictionary


stateSaver

)
{


string


installPath

=

this

.

Context

.

Parameters

[

"targetdir"

];


string


server

=

this

.

Context

.

Parameters

[

"server"

];


string


user

=

this

.

Context

.

Parameters

[

"user"

];


//Mysql的配置文件



IniFile


ini

=

new


IniFile

(

installPath

+

@"MySQL\MySQL Server 5.5\my.ini"

);


//mysql安装路径



ini

.

Write

(

"mysqld"

,

"basedir"

,

installPath

+

@"MySQL\MySQL Server 5.5\"

);


//Mysql数据文件夹



ini

.

Write

(

"mysqld"

,

"datadir"

,

installPath

+

@"MySQL\MySQL Server 5.5\Data\"

);


base

.

Install

(

stateSaver

);
}


protected override void


OnAfterInstall

(

IDictionary


savedState

)
{


string


installPath

=

this

.

Context

.

Parameters

[

"targetdir"

];


string


mysqlpath

=

installPath

+

@"MySQL\MySQL Server 5.5\bin"

;


string


jrePath

=

installPath

+

@"Java\jre6\bin"

;


string


iniPath

=

installPath

+

@"MySQL\MySQL Server 5.5\my.ini"

;


string


tomcatPath

=

installPath

+

@"Tomcat\Tomcat6\bin"

;


InstallMysql

(

mysqlpath

,

iniPath

,

true

);


//设置Mysql环境变量



SysEnvironment

.

SetPath

(

mysqlpath

);


//设置JRE环境变量



SysEnvironment

.

SetPath

(

jrePath

);


//设置Tomcat环境变量



SysEnvironment

.

SetPath

(

tomcatPath

);


base

.

OnAfterInstall

(

savedState

);
}


///


///


安装与卸载Mysql服务



///

///
///
///


为true时安装,否则为卸载






private static void


InstallMysql

(

string


mysqlpath

,

string


iniPath

,

bool


isInstall

)
{


//安装Mysql服务



Process


process

=

new


Process

();


process

.

StartInfo

.

FileName

=

"cmd.exe"

;


process

.

StartInfo

.

UseShellExecute

=

false

;


process

.

StartInfo

.

RedirectStandardInput

=

true

;


process

.

StartInfo

.

RedirectStandardOutput

=

true

;


process

.

StartInfo

.

RedirectStandardError

=

true

;


process

.

StartInfo

.

CreateNoWindow

=

true

;


process

.

Start

();


process

.

StandardInput

.

WriteLine

(

""

);


process

.

StandardInput

.

WriteLine

(

"cd "

+

mysqlpath

);


process

.

StandardInput

.

WriteLine

(

mysqlpath

.

Substring

(2) +

" cd"

);


//mysqld --install MySQLXY --defaults-file="D:\Program Files\MySQL\MySQL Server 5.5\my.ini"



if

(

isInstall

)
{


process

.

StandardInput

.

WriteLine

(

"mysqld --install MySQL --defaults-file="

+

'"'

+

iniPath

+

'"'

);


process

.

StandardInput

.

WriteLine

(

"net start mysql"

);
}


else


{


process

.

StandardInput

.

WriteLine

(

"net stop mysql"

);


//mysqld --install MySQLXY --defaults-file="D:\Program Files\MySQL\MySQL Server 5.5\my.ini"



process

.

StandardInput

.

WriteLine

(

"mysqld --remove MySQL --defaults-file="

+

'"'

+

iniPath

+

'"'

);
}


process

.

StandardInput

.

WriteLine

(

""

);


process

.

StandardInput

.

WriteLine

(

""

);


process

.

StandardInput

.

WriteLine

(

"exit"

);


//Writefile(installPath,process.StandardOutput.ReadToEnd().ToString());



process

.

Close

();
}


public override void


Uninstall

(

IDictionary


savedState

)
{


string


installPath

=

this

.

Context

.

Parameters

[

"targetdir"

];


string


mysqlpath

=

installPath

+

@"MySQL\MySQL Server 5.5\bin"

;


string


iniPath

=

installPath

+

@"MySQL\MySQL Server 5.5\my.ini"

;



InstallMysql

(

mysqlpath

,

iniPath

,

true

);


base

.

Uninstall

(

savedState

);
}


///
///


写日志



///

///
///



public void


Writefile

(

string


path

,

string


msg

)
{


string


file

=

path

+

@"日志.txt"

;


if

(

File

.

Exists

(

file

))


File

.

Delete

(

file

);


using

(

StreamWriter


sw

=

new


StreamWriter

(

file

,

true

))
{


sw

.

WriteLine

(

msg

);
}
}
}
}

下面是

SysEnvironment 类的代码,读取设置注册表的信息 代码已经封装好了,就不介绍了


(环境变量的注册表位置为HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001 / Session Manager/

Environment




using


System

;

using


System

.

Collections

.

Generic

;

using


System

.

Text

;

using


Microsoft

.

Win32

;

namespace


CustomAction

{
class


SysEnvironment

{


///


///


获取系统环境变量



///

///
///



public static string


GetSysEnvironmentByName

(

string


name

)
{


string


result

=

string

.

Empty

;


try


{


result

=

OpenSysEnvironment

().

GetValue

(

name

).

ToString

();

//读取


}


catch

(

Exception

)
{


return string

.

Empty

;
}


return


result

;
}


///
///


打开系统环境变量注册表



///

///


RegistryKey






private static


RegistryKey


OpenSysEnvironment

()
{


RegistryKey


regLocalMachine

=

Registry

.

LocalMachine

;


RegistryKey


regSYSTEM

=

regLocalMachine

.

OpenSubKey

(

"SYSTEM"

,

true

);

//打开HKEY_LOCAL_MACHINE下的SYSTEM



RegistryKey


regControlSet001

=

regSYSTEM

.

OpenSubKey

(

"ControlSet001"

,

true

);

//打开ControlSet001



RegistryKey


regControl

=

regControlSet001

.

OpenSubKey

(

"Control"

,

true

);

//打开Control



RegistryKey


regManager

=

regControl

.

OpenSubKey

(

"Session Manager"

,

true

);

//打开Control



RegistryKey


regEnvironment

=

regManager

.

OpenSubKey

(

"Environment"

,

true

);


return


regEnvironment

;
}


///
///


设置系统环境变量



///

///


变量名



///









public static void


SetSysEnvironment

(

string


name

,

string


strValue

)
{


OpenSysEnvironment

().

SetValue

(

name

,

strValue

);
}


///
///


检测系统环境变量是否存在



///

///
///



public bool


CheckSysEnvironmentExist

(

string


name

)
{


if

(!

string

.

IsNullOrEmpty

(

GetSysEnvironmentByName

(

name

)))


return true

;


else
return false

;
}


///
///


添加到PATH环境变量(会检测路径是否存在,存在就不重复)



///

///



public static void


SetPath

(

string


strHome

)
{


string


pathlist

=

GetSysEnvironmentByName

(

"PATH"

);


string

[]

list

=

pathlist

.

Split

(

';'

);


bool


isPathExist

=

false

;


foreach

(

string


item


in


list

)
{


if

(

item

==

strHome

)

isPathExist

=

true

;
}


if

(!

isPathExist

)
{


SetSysEnvironment

(

"PATH"

,

pathlist

+

strHome

+

";"

);
}
}
}
}

好了,接下来创建Ini文件操作类,调用了系统api,已经封装好了,可以直接用了


using


System

;

using


System

.

IO

;

using


System

.

Collections

.

Generic

;

using


System

.

Text

;

using


System

.

Runtime

.

InteropServices

;

namespace


CustomAction

{
public class


IniFile

{


private string


m_iniFileFullPath

;


///


///


ini文件路径



///

///



public


IniFile

(

string


iniFilePath

)
{


m_iniFileFullPath

=

iniFilePath

;
}


///
///


写入信息



///

///
///
///



public void


Write

(

string


iniSection

,

string


iniKey

,

string


iniValue

)
{


WritePrivateProfileString

(

iniSection

,

iniKey

,

iniValue

,

this

.

m_iniFileFullPath

);
}


///
///


读取信息



///

///
///
///



public string


Read

(

string


iniSection

,

string


iniKey

)
{


StringBuilder


resultValue

=

new


StringBuilder

(255);


int


i

=

GetPrivateProfileString

(

iniSection

,

iniKey

,

""

,

resultValue

,
255,

this

.

m_iniFileFullPath

);


return


resultValue

.

ToString

();
}


///
///


写入信息



///

///
///
///
///



public void


Write

(

string


iniSection

,

string


iniKey

,

string


iniValue

,

string


iniPath

)
{


WritePrivateProfileString

(

iniSection

,

iniKey

,

iniValue

,

iniPath

);
}


///
///


读取信息



///

///
///
///
///



public static string


Read

(

string


iniSection

,

string


iniKey

,

string


iniPath

)
{


StringBuilder


resultValue

=

new


StringBuilder

(255);


int


i

=

GetPrivateProfileString

(

iniSection

,

iniKey

,

""

,

resultValue

,
255,

iniPath

);


return


resultValue

.

ToString

();
}
[

DllImport

(

"kernel32"

)]


private static extern long


WritePrivateProfileString

(

string


section

,


string


key

,

string


val

,

string


filePath

);
[

DllImport

(

"kernel32"

)]


private static extern int


GetPrivateProfileString

(

string


section

,


string


key

,

string


def

,

StringBuilder


retVal

,


int


size

,

string


filePath

);
}
}

现在基本代码已经写好了,右键解决方案,添加安装部署项目,右键项目文件视图,新建文件夹Mysql、Java、Tomcat,将你的拷贝的Mysql贴进Mysql项目里面

 

接下来,右键应用程序文件夹添加主输出

然后右键项目,自定义操作视图,添加安装和卸载的操作(选中主输出)

好了,现在可以测试下了Mysql,未完待续。。。。。。。

下次接着写Tomcat


C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装




推荐阅读
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
author-avatar
禁灭19
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有