.net安装包自动安装Mysql数据库

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 原文:.net安装包自动安装Mysql数据库在制作.Net安装包的时候,如果项目有用到数据库,怎么能够把数据库打包安装呢?网上已经有很多自动安装Sql Server数据库的例子,但是自动安装mysql的例子似乎不多。
原文: .net安装包自动安装Mysql数据库

在制作.Net安装包的时候,如果项目有用到数据库,怎么能够把数据库打包安装呢?网上已经有很多自动安装Sql Server数据库的例子,但是自动安装mysql的例子似乎不多。本文就介绍一下如何在.Net安装包中自动安装Mysql数据库。

最终我们要实现的效果是,部署.Net桌面应用程序时,能够一键自动安装应用程序以及附带的MySql数据库,并初始化数据库。

实现步骤如下:

 

1.准备一个干净的MySql安装包

mysql本身是开源的,安装完mysql数据库后,其实只是在系统里面安装了一个Windows服务(相对于Windows系统来说)

可以从网上下载一个mysql版本,比如我用的是Mysql5.5,下载地址:http://dev.mysql.com/downloads/mysql/5.5.html

下载安装包,按照正常安装流程安装完后,直接将安装后的目录拷贝一份为我们后面制作安装项目所用。

一般的mysql目录如:

 

2.修改My.ini配置文件

拷贝一份Mysql目录之后,需要根据项目的需要,需改一下mysql的设置,如设置缓存大小、存储类型等参数。

需要特别设置的是:

端口需要做特别设置,一般默认是3306端口,我们为了防止冲突,将端口改为3307

[mysqld]

# The TCP/IP Port the MySQL Server will listen on port=3307

basedir需要修改,此目录就是MySql文件夹的物理位置,这里显然需要动态配置,我们暂时用一个自定义的占位符来代替,后面在程序中修改。

#Path to installation directory. All paths are usually resolved relative to this.
basedir="%BaseDir%/MySQL Server 5.5/"

datadir需要修改,此目录是Mysql数据的存放路径,也需要动态配置,暂时用占位符代替,后面用程序修改。

#Path to the database root
datadir="%BaseDir%/MySQL Server 5.5/data/"

 

3.在安装项目中包含mysql文件

为了测试,我建了如下三个项目:

setup1项目就是.Net的安装项目

MySqlAutoInstall是模拟的一个需要使用mysql数据库的桌面程序。

InserterDb项目是一个DLL类库项目,功能是安装mysql数据库。我们将在setup1项目中调用此类库实现mysq数据库自动安装。

 

右键Setup1项目,选择“视图”--“文件系统”,将第一步准备的干净Mysql数据库文件夹拖入“应用程序文件夹”下。

再建一个“你的程序”文件夹(可自定义名称),下面放你的桌面程序,本例中是MySqlAutoInstall项目。

 

4.创建安装MySql数据库的自定义操作

建InserterDb的类库项目,添加一个“安装程序类”Installer1.cs

代码如下:

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;

using MySql.Data.MySqlClient;
using System.IO;
using System.Threading;

namespace inserterDb
{
    [RunInstaller(true)]
    public partial class Installer1 : System.Configuration.Install.Installer
    {
        public Installer1()
        {
            InitializeComponent();
        }

        public override void Install(IDictionary stateSaver)
        {
            base.Install(stateSaver);

            InsertMySql();
            CreatDataBase();
            Log("安装成功!");
        }

       //安装mysql
        protected void InsertMySql()
        {
            string physicalRoot = this.Context.Parameters["targetdir"]; // 安装物理路径 C:\program\microp
            string appPath = physicalRoot + "\\MySQL Server 5.5\\";

            //1.修改my.ini配置  为防止本机已装mysql,特修改my.ini中端口号为3307
            string iniFile = File.ReadAllText(appPath + "my.ini");
            iniFile = iniFile.Replace("%BaseDir%", physicalRoot.Replace("\\", "/")); //%BaseDir%为my.ini中自定义的目录参数
            File.WriteAllText(appPath + "my.ini", iniFile);

            Log("创建win服务……");
            //2.创建win服务
            string info1 = CommandHelper.Execute(appPath + "bin\\mysqld.exe", " install MySQL2 --defaults-file=\"" + appPath + "my.ini\"", 0);
            Log(info1);
            Thread.Sleep(3000);
            Log("使用net start启动服务");
            //3.启动服务
            string info2 = CommandHelper.Execute("net start MySQL2", 0);
            Log(info2);

            Log("启动服务完成!");
            Thread.Sleep(5000);
            MySqlConnection con = new MySqlConnection("Data Source='localhost';Port='3307';Database='';User Id='root';Password='';");
            try
            {
                con.Open();
                con.Close();
                Log("连接成功!");
            }
            catch (Exception ex)
            {
                Log("连接失败!" + ex.Message);
            }
        }
        //创建数据库并初始化表
        protected void CreatDataBase()
        {
            string physicalRoot = this.Context.Parameters["targetdir"]; // 安装物理路径 C:\program\microp
            string mysqlcon = "Data Source='localhost';Port='3307';Database='{0}';User Id='root';Password='';";

            MySqlConnection conn = new MySqlConnection(string.Format(mysqlcon, ""));
            FileInfo file = new FileInfo(physicalRoot + "\\DBInit\\yourDB.sql");  //filename是sql脚本文件路径。
            string sql = file.OpenText().ReadToEnd();

            try
            {
                MySqlScript script = new MySqlScript(conn);
                script.Query = sql;
                int count = script.Execute();
                Log("数据库初始化完成!");

                MySqlConnection con2 = new MySqlConnection(string.Format(mysqlcon, "yourDB"));
                con2.Open();
                MySqlCommand dbcom = new MySqlCommand("select count(*) from t_image", con2);
                dbcom.ExecuteScalar();
                con2.Close();
                Log("数据库创建OK!");

                //修改config.xml中的数据库链接地址
                
            }
            catch (Exception ex2)
            {
                Log("数据库创建失败!" + ex2.Message);
            }


        }

        //写日志
        protected void Log(string line)
        {
            string physicalRoot = this.Context.Parameters["targetdir"]; // 安装物理路径 C:\program\microp
            string filePath = physicalRoot + "Install_log.txt";
            if (File.Exists(filePath))
            {
                File.AppendAllLines(filePath, new string[] { DateTime.Now.ToString("[yyyy-MM-dd HH:mm:ss] ") + line });
            }
            else
            {
                File.WriteAllLines(filePath, new string[] { DateTime.Now.ToString("[yyyy-MM-dd HH:mm:ss] ") + line });
            }
        }
    }
}

 

此类 override void Install方法,当程序安装完后,立即启动数据库的安装。

用代码安装MySql数据库安装步骤是:

1)修改my.ini配置  为防止本机已装mysql,特修改my.ini中端口号为3307

   my.ini中的路径应该设置为安装程序的安装目录,这个目录是用户自定义的,可以通过设置Setup的customActionData属性来传递参数,详见后文介绍。

2)调用“mysqld.exe -install ”命令安装mysql数据库服务

3)使用net start启动Mysql服务

4)验证数据库安装结果

5)执行初始化脚本,初始化数据库

 

5.在Setup中关联安装MySql数据库的自定义操作

右键单击“setup1”项目,选择“视图”--“自定义操作” 在“安装”文件夹下右键选“添加自定义操作”  选择第4步制作的InserterDb的类库项目。

设置刚添加的自定义操作的属性,CustomActionData  为  /targetdir="[TARGETDIR]\"

这里的targetdir是自定义的参数名称,目的是获取用户选择的程序安装路径,用于修改Mysql配置文件中的%BaseDir%参数。

 

测试源码下载: Source

注意,由于mysql文件太大,该目录只留目录名,文件自己拷贝进去即可。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)
|
29天前
|
SQL 数据库连接 数据库
你不知道ADo.Net中操作数据库的步骤【超详细整理】
你不知道ADo.Net中操作数据库的步骤【超详细整理】
16 0
|
29天前
|
关系型数据库 MySQL 数据库
rds安装数据库客户端工具
安装阿里云RDS的数据库客户端涉及在本地安装对应类型(如MySQL、PostgreSQL)的客户端工具。对于MySQL,可选择MySQL Command-Line Client或图形化工具如Navicat,安装后输入RDS实例的连接参数进行连接。对于PostgreSQL,可以使用`psql`命令行工具或图形化客户端如PgAdmin。首先从阿里云控制台获取连接信息,然后按照官方文档安装客户端,最后配置客户端连接以确保遵循安全指引。
82 1
|
24天前
|
Ubuntu 关系型数据库 MySQL
Ubuntu 中apt 安装MySQL数据库
Ubuntu 中apt 安装MySQL数据库
66 0
|
3天前
|
关系型数据库 MySQL Linux
Linux联网安装MySQL Server
Linux联网安装MySQL Server
13 0
|
3天前
|
关系型数据库 MySQL Linux
centos7安装mysql-带网盘安装包
centos7安装mysql-带网盘安装包
33 2
|
7天前
|
关系型数据库 MySQL 数据库
Docker安装MySQL
Docker安装MySQL
14 1
|
7天前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL 安装及连接
MySQL 安装及连接
25 0
|
10天前
|
关系型数据库 MySQL 数据库
docker自定义安装mysql 5.7
docker自定义安装mysql 5.7
19 0
|
10天前
|
关系型数据库 MySQL Linux
CentOS 7 下使用yum安装MySQL5.7.20 最简单 图文详解
CentOS 7 下使用yum安装MySQL5.7.20 最简单 图文详解
47 0