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




推荐阅读
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
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社区 版权所有