C#安裝程序中打包MSDE的八個(gè)步驟
在Visual Studio 2003的工程中添加Microsoft SQL Server 2000 Desktop Engine (MSDE)的自動(dòng)安裝合并模塊MSM:
1.下載MSDE2000的sp3a安裝包。
2.解壓到本地硬盤(pán),其中的MSM文件夾中的東東就是MSDE2000合并模塊。
3.在你的工程中添加一個(gè)安裝工程假設(shè)為MySetup,按照正常的步驟添加工程輸出(Project Output),選擇輸出文件(primary output)和內(nèi)容文件(content files)兩項(xiàng)。
4.添加合并模塊(Merge Moudle),選擇瀏覽,指定到你的MSDE的MSM文件夾,選擇MSM(不包括msm1033和msm2052)下的所有的文件(REPL.MSM、REPL_RES.MSM、 DMO_RES.MSM和DMO.MSM可以不選),打開(kāi)。
5.設(shè)置安裝工程的屬性(Properties)中的SearchPath,指定為你的MSM所在路徑(MSM和MSM1033和MSM2052)。
6.設(shè)置好安裝程序的其他屬性,這時(shí)就可以對(duì)你的安裝工程進(jìn)行編譯了。
7.我們需要修改打好的安裝包,使它可以在安裝完程序后自動(dòng)安裝MSDE的一個(gè)實(shí)例(假設(shè)實(shí)例名為:MyServer)。我們需要用到MS的一個(gè)工具ORCA
8.用ORCA打開(kāi)安裝包文件MySetup.msi
InstallExecuteSequence表
GetSqlStates.XXXXXX 103->421
InstallInitialize 1800->1799
RemoveExistingProducts 1825->1800
InstallUISequence表
GetSqlStates.XXXXXX 103->421
Property表添加
SqlInstanceName: MSDEDH實(shí)例服務(wù)名
SqlSecurityMode: SQL 用SQL模式登錄
SqlSaPwd: sa的密碼
DISABLENETWORKPROTOCOLS=0:網(wǎng)絡(luò)訪問(wèn)的話也要加這項(xiàng)
重寫(xiě)C#安裝程序Installer
下面方法適用于C#安裝程序,沒(méi)有添加SqlInstanceName:這個(gè)屬性,用機(jī)器名訪問(wèn)msde
- public override void Commit(IDictionary savedState)
- {
- base.Commit (savedState);
- //啟動(dòng)windows服務(wù)
- new System.ServiceProcess.ServiceController("MSSQLSERVER").Start();
- //附加數(shù)據(jù)庫(kù)
- SqlConnection Connection = new SqlConnection("password=**;user id=sa;data source="+SystemInformation.ComputerName);
- SqlCommand Cmd = new SqlCommand("sp_attach_db",Connection);
- Cmd.CommandType = CommandType.StoredProcedure;
- SqlParameter loginname=Cmd.Parameters.Add("@dbname",SqlDbType.NVarChar,20);
- loginname.value ="yourname";
- SqlParameter nickname=Cmd.Parameters.Add("@filename1",SqlDbType.NVarChar,50);
- nickname.value =Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)+"yourname.mdf";
- SqlParameter password=Cmd.Parameters.Add("@filename2",SqlDbType.NVarChar,50);
- password.value =Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)+"yourname.ldf";
- Connection.Open();
- Cmd.ExecuteNonQuery();
- Connection.Close();
- }
用附加數(shù)據(jù)庫(kù),我認(rèn)為是***的解決辦法。
在沒(méi)有SQL環(huán)境的機(jī)器上運(yùn)行你的C#安裝程序,會(huì)自動(dòng)安裝MSDE,并附加你的數(shù)據(jù)庫(kù),重起機(jī)器后,自動(dòng)啟動(dòng)Sql Server的實(shí)例。
【編輯推薦】