10.
最後還要保證咱們項目運行所必須的環境
(.Net Framework
等
)
右鍵單擊安裝項目的項目名
,
進入屬性
點擊系統必備
11.
在
DBClassLiabrary
類庫的
MyInstaller.cs
文件中編寫安裝數據庫的代碼
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Data.SqlClient;
using Microsoft.Win32;
namespace DBAction
{
[RunInstaller(true)]
public partial class MyInstaller : Installer
{
public MyInstaller()
{
InitializeComponent();
}
private void ExecuteSql(string connString, string DBName, string sqlString)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand comm = new SqlCommand(sqlString, conn);
try
{
conn.Open();
conn.ChangeDatabase(DBName);//更改當前數據庫
comm.ExecuteNonQuery();
}
catch (SqlException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
conn.Close();
}
}
//重寫Install方法
public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
try
{
//建立數據庫
string connStr = string.Format("data source={0}; user id={1}; password={2}; persist security info = false; packet size=4096",
this.Context.Parameters["server"], this.Context.Parameters["User"],
this.Context.Parameters["pwd"]);
ExecuteSql(connStr, "master", "create database " + this.Context.Parameters["dbname"]);
//建立一個進程用來執行sql腳本---建表
System.Diagnostics.Process sqlProcess = new System.Diagnostics.Process();
//設置該進程要啓動的文檔是"osql.exe",這個執行文件用來在命令行執行sql腳本文件
sqlProcess.StartInfo.FileName = "osql.exe";
//配置進程須要的參數
//Context.Parameters--獲取在運行InstallUtil.exe時輸入的命令行參數
sqlProcess.StartInfo.Arguments = string.Format("-U {0} -P {1} -i {2}bankDB.sql",
this.Context.Parameters["user"], this.Context.Parameters["pwd"],
this.Context.Parameters["targetdir"]);
sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
}
catch (Exception ex)
{
Console.Write(ex.ToString());
}
}
/// <summary>
/// 重載OnBeforeInstall,肯定是否安裝.NETFramework
/// </summary>
protected override void OnBeforeInstall(System.Collections.IDictionary savedState)
{
base.OnBeforeInstall(savedState);
try
{
Microsoft.Win32.RegistryKey key;//定義註冊表鍵
//讀取相同位置上的信息,若key爲空,則不存在此鍵值,則進行安裝;相反爲存在則不安裝
key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\.NETFramework", true);
if (key == null)
{
Process.Start(Context.Parameters["targetdir"].ToString() + @" dotnetfx \dotnetfx.exe");//獲得安裝後文件的路徑,並經過路徑和文件名來啓動
}
}
catch (Exception e)//抓取錯誤信息,並給予提示
{
MessageBox.Show("安裝程序錯誤!錯誤提示:" + e.Message);
}
}
}
}
提示:
在
bankDB.sql
腳本文件中最好加上
USE bankDB GO
,
爲了使安裝程序程序可以正確運行,必須確保你的
bankDB.sql
腳本文件準確無誤,檢查方法就是在命令行中輸入:
C:> osql –U sa –P 123 –i D:\
打包示例
\bankDB.sql
若是在你本身的機器上能生成數據庫
bankDB
,就說明
sql
腳本沒錯
12.
整個解決方案所有完成後,請分別生成
3
個項目的執行文件,確保獲得最新結果。其中在
MyProjSetup
的
Debug
文件夾中的就是咱們須要的結果
咱們雙擊
setup.exe
或者
MyProjSetup.msi
以後
,
就可以在目標計算機上安裝
bank
數據庫和咱們本身的
MyProjectV2
的執行文件了
個人目標文件選擇的是
D:\SetupDemo
,最後在該文件夾下的文件以下:
能夠看到在目標機器上的目標路徑下包含了項目所須要的各個類庫、文件等等,以及本身的執行文件
/dbname=[EDITA1] /server=[EDITA2] /user = [EDITA3] /pwd = [EDITA4] /targetdir="[TARGETDIR]\" -------
錯誤
/dbname=[EDITA1] /server=[EDITA2] /user=[EDITA3] /pwd=[EDITA4] /targetdir="[TARGETDIR]\" -------
正確
切記切記:/key=[value] 之間絕對不能有空格
最後須要在目標機器上安裝
.net framework.
另外
app.Config
配置文件也能夠打包,並且在打包後會自動出如今目標機器的目標文件夾,所以並不存在打包後沒法修改配置文件的狀況。
<appSettings>
<add key=」connStr」value=」………」>
</ appSettings >
注意須要添加引用
System.Configration
點擊系統必備
選擇你須要的組件
,
如
.Net Framework2.0
和水晶報表組件等