国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

.net安裝包自動安裝Mysql數(shù)據(jù)庫

2019-11-17 03:12:15
字體:
供稿:網(wǎng)友

.net安裝包自動安裝MySQL數(shù)據(jù)庫

在制作.Net安裝包的時候,如果項(xiàng)目有用到數(shù)據(jù)庫,怎么能夠把數(shù)據(jù)庫打包安裝呢?網(wǎng)上已經(jīng)有很多自動安裝Sql Server數(shù)據(jù)庫的例子,但是自動安裝mysql的例子似乎不多。本文就介紹一下如何在.Net安裝包中自動安裝Mysql數(shù)據(jù)庫。

最終我們要實(shí)現(xiàn)的效果是,部署.Net桌面應(yīng)用程序時,能夠一鍵自動安裝應(yīng)用程序以及附帶的MySql數(shù)據(jù)庫,并初始化數(shù)據(jù)庫。

實(shí)現(xiàn)步驟如下:

1.準(zhǔn)備一個干凈的MySql安裝包

mysql本身是開源的,安裝完mysql數(shù)據(jù)庫后,其實(shí)只是在系統(tǒng)里面安裝了一個Windows服務(wù)(相對于Windows系統(tǒng)來說)

可以從網(wǎng)上下載一個mysql版本,比如我用的是Mysql5.5,下載地址:http://dev.mysql.com/downloads/mysql/5.5.html

下載安裝包,按照正常安裝流程安裝完后,直接將安裝后的目錄拷貝一份為我們后面制作安裝項(xiàng)目所用。

一般的mysql目錄如:

2.修改My.ini配置文件

拷貝一份Mysql目錄之后,需要根據(jù)項(xiàng)目的需要,需改一下mysql的設(shè)置,如設(shè)置緩存大小、存儲類型等參數(shù)。

需要特別設(shè)置的是:

端口需要做特別設(shè)置,一般默認(rèn)是3306端口,我們?yōu)榱朔乐箾_突,將端口改為3307

[mysqld]

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

basedir需要修改,此目錄就是MySql文件夾的物理位置,這里顯然需要動態(tài)配置,我們暫時用一個自定義的占位符來代替,后面在程序中修改。

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

datadir需要修改,此目錄是Mysql數(shù)據(jù)的存放路徑,也需要動態(tài)配置,暫時用占位符代替,后面用程序修改。

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

3.在安裝項(xiàng)目中包含mysql文件

為了測試,我建了如下三個項(xiàng)目:

setup1項(xiàng)目就是.Net的安裝項(xiàng)目

MySqlAutoInstall是模擬的一個需要使用mysql數(shù)據(jù)庫的桌面程序。

InserterDb項(xiàng)目是一個DLL類庫項(xiàng)目,功能是安裝mysql數(shù)據(jù)庫。我們將在setup1項(xiàng)目中調(diào)用此類庫實(shí)現(xiàn)mysq數(shù)據(jù)庫自動安裝。

右鍵Setup1項(xiàng)目,選擇“視圖”--“文件系統(tǒng)”,將第一步準(zhǔn)備的干凈Mysql數(shù)據(jù)庫文件夾拖入“應(yīng)用程序文件夾”下。

再建一個“你的程序”文件夾(可自定義名稱),下面放你的桌面程序,本例中是MySqlAutoInstall項(xiàng)目。

4.創(chuàng)建安裝MySql數(shù)據(jù)庫的自定義操作

建InserterDb的類庫項(xiàng)目,添加一個“安裝程序類”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 + "http://MySQL Server 5.5//";            //1.修改my.ini配置  為防止本機(jī)已裝mysql,特修改my.ini中端口號為3307            string iniFile = File.ReadAllText(appPath + "my.ini");            iniFile = iniFile.Replace("%BaseDir%", physicalRoot.Replace("http://", "/")); //%BaseDir%為my.ini中自定義的目錄參數(shù)            File.WriteAllText(appPath + "my.ini", iniFile);            Log("創(chuàng)建win服務(wù)……");            //2.創(chuàng)建win服務(wù)            string info1 = CommandHelper.Execute(appPath + "bin//mysqld.exe", " install MySQL2 --defaults-file=/"" + appPath + "my.ini/"", 0);            Log(info1);            Thread.Sleep(3000);            Log("使用net start啟動服務(wù)");            //3.啟動服務(wù)            string info2 = CommandHelper.Execute("net start MySQL2", 0);            Log(info2);            Log("啟動服務(wù)完成!");            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);            }        }        //創(chuàng)建數(shù)據(jù)庫并初始化表        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 + "http://DBInit//yourDB.sql");  //filename是sql腳本文件路徑。            string sql = file.OpenText().ReadToEnd();            try            {                MySqlScript script = new MySqlScript(conn);                script.Query = sql;                int count = script.Execute();                Log("數(shù)據(jù)庫初始化完成!");                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("數(shù)據(jù)庫創(chuàng)建OK!");                //修改config.xml中的數(shù)據(jù)庫鏈接地址                            }            catch (Exception ex2)            {                Log("數(shù)據(jù)庫創(chuàng)建失敗!" + 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方法,當(dāng)程序安裝完后,立即啟動數(shù)據(jù)庫的安裝。

用代碼安裝MySql數(shù)據(jù)庫安裝步驟是:

1)修改my.ini配置 為防止本機(jī)已裝mysql,特修改my.ini中端口號為3307

my.ini中的路徑應(yīng)該設(shè)置為安裝程序的安裝目錄,這個目錄是用戶自定義的,可以通過設(shè)置Setup的customActionData屬性來傳遞參數(shù),詳見后文介紹。

2)調(diào)用“mysqld.exe -install ”命令安裝mysql數(shù)據(jù)庫服務(wù)

3)使用net start啟動Mysql服務(wù)

4)驗(yàn)證數(shù)據(jù)庫安裝結(jié)果

5)執(zhí)行初始化腳本,初始化數(shù)據(jù)庫

5.在Setup中關(guān)聯(lián)安裝MySql數(shù)據(jù)庫的自定義操作

右鍵單擊“setup1”項(xiàng)目,選擇“視圖”--“自定義操作” 在“安裝”文件夾下右鍵選“添加自定義操作” 選擇第4步制作的InserterDb的類庫項(xiàng)目。

設(shè)置剛添加的自定義操作的屬性,CustomActionData為 /targetdir="[TARGETDIR]/"

這里的targetdir是自定義的參數(shù)名稱,目的是獲取用戶選擇的程序安裝路徑,用于修改Mysql配置文件中的%BaseDir%參數(shù)。

測試源碼下載:Source

注意,由于mysql文件太大,該目錄只留目錄名,文件自己拷貝進(jìn)去即可。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 定陶县| 精河县| 德钦县| 那坡县| 从江县| 金昌市| 江油市| 顺平县| 宁陕县| 邵阳市| 通河县| 海盐县| 巴彦淖尔市| 长寿区| 海安县| 从化市| 城步| 穆棱市| 永州市| 株洲县| 台山市| 红河县| 甘泉县| 亚东县| 图片| 克拉玛依市| 资溪县| 绥棱县| 吉木乃县| 湾仔区| 绩溪县| 苏尼特右旗| 邯郸市| 连山| 怀安县| 固阳县| 敦化市| 泌阳县| 罗田县| 邵武市| 凤城市|