热门标签 | 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 环境安装程序,一键式安装




推荐阅读
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社区 版权所有