C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装
2015-05-11 17:57
513 查看
原文:C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装要求:
JDK、Mysql、Tomcat三者制作成一个安装包,
不能单独安装,安装过程不显示三者的界面,
安装完成要配置好JDK环境、Mysql服务、Tomcat 服务
目的:
解决客户在安装软件的复杂配置和繁琐
便于管理软件版本
便于系统集成
分析:
由于不能使用软件的原始安装版本,故只能将JDK的安装目录拷贝出来,放在D盘的SoftSource文件夹,由于要管理三者,将这三个放进一个文件夹里面
Mysql、Tomcat只能用解压版,要让软件运行起来,要做的事情如下:
配置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
重写安装方法(安装前、安装、安装后)附上代码:
下面是SysEnvironment 类的代码,读取设置注册表的信息 代码已经封装好了,就不介绍了
(环境变量的注册表位置为HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001 / Session Manager/Environment )
好了,接下来创建Ini文件操作类,调用了系统api,已经封装好了,可以直接用了
现在基本代码已经写好了,右键解决方案,添加安装部署项目,右键项目文件视图,新建文件夹Mysql、Java、Tomcat,将你的拷贝的Mysql贴进Mysql项目里面
接下来,右键应用程序文件夹添加主输出
然后右键项目,自定义操作视图,添加安装和卸载的操作(选中主输出)
好了,现在可以测试下了Mysql,未完待续。。。。。。。
下次接着写Tomcat
JDK、Mysql、Tomcat三者制作成一个安装包,
不能单独安装,安装过程不显示三者的界面,
安装完成要配置好JDK环境、Mysql服务、Tomcat 服务
目的:
解决客户在安装软件的复杂配置和繁琐
便于管理软件版本
便于系统集成
分析:
由于不能使用软件的原始安装版本,故只能将JDK的安装目录拷贝出来,放在D盘的SoftSource文件夹,由于要管理三者,将这三个放进一个文件夹里面
Mysql、Tomcat只能用解压版,要让软件运行起来,要做的事情如下:
配置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); } /// <summary> /// 安装与卸载Mysql服务 /// </summary> /// <param name="mysqlpath"></param> /// <param name="iniPath"></param> /// <param name="isInstall">为true时安装,否则为卸载</param> 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); } /// <summary> /// 写日志 /// </summary> /// <param name="path"></param> /// <param name="msg"></param> 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 { /// <summary> /// 获取系统环境变量 /// </summary> /// <param name="name"></param> /// <returns></returns> public static string GetSysEnvironmentByName(string name) { string result = string.Empty; try { result = OpenSysEnvironment().GetValue(name).ToString();//读取 } catch (Exception) { return string.Empty; } return result; } /// <summary> /// 打开系统环境变量注册表 /// </summary> /// <returns>RegistryKey</returns> 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; } /// <summary> /// 设置系统环境变量 /// </summary> /// <param name="name">变量名</param> /// <param name="strValue">值</param> public static void SetSysEnvironment(string name, string strValue) { OpenSysEnvironment().SetValue(name, strValue); } /// <summary> /// 检测系统环境变量是否存在 /// </summary> /// <param name="name"></param> /// <returns></returns> public bool CheckSysEnvironmentExist(string name) { if (!string.IsNullOrEmpty(GetSysEnvironmentByName(name))) return true; else return false; } /// <summary> /// 添加到PATH环境变量(会检测路径是否存在,存在就不重复) /// </summary> /// <param name="strPath"></param> 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; /// <summary> /// ini文件路径 /// </summary> /// <param name="iniFilePath"></param> public IniFile(string iniFilePath) { m_iniFileFullPath = iniFilePath; } /// <summary> /// 写入信息 /// </summary> /// <param name="iniSection"></param> /// <param name="iniKey"></param> /// <param name="iniValue"></param> public void Write(string iniSection, string iniKey, string iniValue) { WritePrivateProfileString(iniSection, iniKey, iniValue, this.m_iniFileFullPath); } /// <summary> /// 读取信息 /// </summary> /// <param name="iniSection"></param> /// <param name="iniKey"></param> /// <returns></returns> 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(); } /// <summary> /// 写入信息 /// </summary> /// <param name="iniSection"></param> /// <param name="iniKey"></param> /// <param name="iniValue"></param> /// <param name="iniPath"></param> public void Write(string iniSection, string iniKey, string iniValue, string iniPath) { WritePrivateProfileString(iniSection, iniKey, iniValue, iniPath); } /// <summary> /// 读取信息 /// </summary> /// <param name="iniSection"></param> /// <param name="iniKey"></param> /// <param name="iniPath"></param> /// <returns></returns> 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 环境安装程序,一键式安装
- C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装 (续集Tomcat 配置)
- C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装 (续集Tomcat 配置)
- Linux环境安装卸载JDK以及安装Tomcat和发布Java的web程序
- 基于WINDOWS OS ANT + NSIS + BAT + SVN 环境,ANT 一键安装制作 JAVA WEB + TOMCAT7.0 EXE 安装包
- Java&Tomcat&eclipse&mysql&Navicat安装与环境配置视频
- 图解Linux下如何搭建C#开发环境(还能写C/C++/Java等程序,只要安装相应的插件和编译器即可)
- Ubuntu - Edgy Eft 下安装配置Java开发环境(JDK 6 + Eclipse WTP + Tomcat + MySQL)
- windows中安装配置javaweb环境(jdk+tomcat+mysql+navicat+eclipse)
- Centos7.4 安装java开发环境(lnmt)Linux + Nginx+ MySQL+ Tomcat
- Linux CenterOS7 安装配置java运行环境(JDK、mysql、tomcat)
- window10 下安装java开发环境步骤(jdk,maven,idea,MySQL,navicat,tomcat)
- Linux下安装Java环境(JDK8、Tomcat8、MySQL5.6)
- Linux下OneinStack一键安装JAVA+PHP+Tomcat+Nginx+MySQL网站环境
- java+tomcat+jdk+mysql一键安装制作
- OneinStack一键安装JAVA/Tomcat/Nginx/MySQL网站环境
- CentOS安装java环境(jdk+tomcat+mysql)
- 阿里云上安装mysql步骤/ 阿里云ECS搭建Java+mysql+tomcat环境
- 腾讯云centos7 服务器搭建(Java、MySQL、Tomcat环境配置)
- Linux下java环境变量的配置与tomcat安装