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

原文: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);
      }

        /// <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

时间: 2024-10-27 07:44:13

C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装的相关文章

centos7最小版本安装nginx+tomcat+java+mysql运行环境

最近项目从windows搬到linux,由于项目组成员有限并且有其它紧急的任务需要处理,因而这个任务就落到我的头上了.下面记录下centos最小版本安装nginx+tomcat+mysql+java的运行环境. centos7 minimal安装 参考:http://www.tecmint.com/centos-7-installation/ 安装java 下载Java,可到oracle官网获取相应的连接 wget http://download.oracle.com/otn-pub/java/

java+mysql服务器环境搭建笔记

一,安装上传命令 yum -y install lrzsz 二,安装配置JAVA(必须要SUN的JDK,openJDK是不可以的(openJDK支付加密会报错),目前用的版本是1.7) 1,检测java版本,如果是openJDK,则要卸载掉 yum list installed |grep javayum -y remove java-1.7.0-openjdk*  2,如果没有安装Sun的JDK,则安装.下载地址:http://www.oracle.com/technetwork/java/j

各种MySQL客户环境变量程序概述

所有使用mysqlclient客户库与服务器通信的MySQL客户使用下列环境变量: 使用MYSQL_PWD是不安全的.见6.3 与MySQL服务器连接. "mysql"客户使用MYSQL_HISTFILE环境变量中命名的文件来保存命令行历史,历史文件的缺省值是"$HOME/.mysql_history",这里$HOME是HOME环境变量的值. 所有MySQL程序取许多不同的选项,然而,每个MySQL程序提供一个--help选项,你可以使用它得到程序不同选项的完整描述

GitLab一键式安装bitnami 专题

git lab developer角色不能提交到master分支的问题 错误提示: git -c diff.mnemonicprefix=false -c core.quotepath=false push -v origin master:master Pushing to http://xxx/xxx/xxx_HTML.git POST git-receive-pack (47642 bytes) remote: GitLab: You don't have permission[K To

显卡驱动NVIDIA安装程序无法继续安装

  我把原来的驱动卸载后,更新驱动就显示图片这样的东西.该死的驱动精灵.   答:你的电脑应该是双显卡的,需要先安装intel的集显驱动,再安装NV显卡的驱动 虽然可以设置为只使用NV的显卡,但是必须安装intel的显卡驱动才可以

使用Install Anywhere让您的Java安装程序更高效和灵活

本文将介绍如何借助 Install Anywhere 更好地规划和设计 Java 安装程序,提供多平台多操作系统的部署,定义更灵 活的安装流程和环境检查,开发更加友好和美观的用户交互界面.文章主要面向 Java 软件安装程序开发人员,假定您对 Java 以及 Ant 开发有基本的了解,您也可以参见参考资料以了解更多 Install Anywhere 相关的知识. Install Anywhere 介绍 Install Anywhere 概述 Install Anywhere(以下简称 IA)是由

使用WiX制作简单MSI安装程序

WiX完全用xml描述,使用命令行来生成.只要用任何一个文本编辑器就可以了.但是为了开发效率,我们还是借助于辅助工具比较好.是一般使用的工具是两个:一个Visual Studio插件,在WiX的安装包里面附带,另一个就是WiXEdit,WixEdit是编辑的XMLXML的源代码的图形化工具箱.WixEdit会让你创造体制条件与MSI和MSM测试wix工具箱.它提供了直观的.轻松的对话方式编辑wix文件来源. 下载和安装 1.下载Wix 3.0版本,目前还是beta.但是已经足够稳定了,可以应用于

javaweb项目,怎样实现封装成exe程序直接运行安装

问题描述 各位,大侠,最近有个想法,,怎样把javaweb环境,,如:jdk+tomcat+oracle10g等软件加上javaweb项目一起封装成一个.exe可执行的软件,就像腾讯qq软件一样,,实现下一步,下一步,设置路径等这样安装完成,就可以用呢?不知道,那位大侠,有个类似的经验,是使用的什么封装软件或工具,可以提供以下具体的实施步骤么?非常感谢. 解决方案 解决方案二:晕,都说了是WEB,BS模式啊,怎么EXE....解决方案三:还停留在C/S的思想解决方案四:我的意思是,服务器环境搭建

一个完整的Installshield安装程序实例—艾泽拉斯之海洋女神出品(五) --补遗 (已补充第三部分完整版)

原文:一个完整的Installshield安装程序实例-艾泽拉斯之海洋女神出品(五) --补遗 (已补充第三部分完整版) 上一篇:一个完整的安装程序实例-艾泽拉斯之海洋女神出品(四) --高级设置二 转载时请务必保留转载出处和由艾泽拉斯之海洋女神出品的字样:如需刊登,请与作者联系.little_fairycat@126.com. 第三部分:其他 1. 修改显示界面的风格 Installshield 原始安装界面我始终觉得很丑,幸好Installscript 是可以不用写代码就可以改界面风格的.