ASP.NET 項目安裝包制作(三)補充說明
相關文章:ASP.NET項目安裝包制作 、ASP.NET 項目安裝包制作(二)數據庫安裝、其他組件的安裝
一、 安裝標題
按照前面的做法中,在安裝過程中,如下圖:
安裝的標題是HxjWebSteup,這樣的標題和產品名稱顯然是無法再實際項目中使用的。
這里我們需要通過設置安裝項目的屬性來設置一下就可以,選中HxjWebSetup項目按F4出來屬性窗口,這個和右擊項目屬性是不一樣的。如下圖:
我們修改一下ProductName這個屬性,變成Steven hu ProductName,我們再來看看安裝過程,如下圖:
我們想要的效果已經達到了,安裝標題和產品名稱都已經修改。
二、附加數據庫
在第二節中有提到可以使用直接附加數據庫文件的形式來完成我們項目數據庫的創建安裝。其實我們平時經常使用企業管理器來附加數據庫,當然我們也可以執行數據庫的系統存儲過程來完成該項操作。
sp_attach_db 存儲過稱,我們首先來看一下幫助文檔中解釋;
sp_attach_db
將數據庫附加到服務器。語法:
sp_attach_db [ @dbname = ] 'dbname'
,
[ @filename1 = ] 'filename_n' [ ,...16 ]
參數
[@dbname =] 'dbname'
要附加到服務器的數據庫的名稱。該名稱必須是唯一的。dbname 的數據類型為 sysname,默認值為 NULL。
[@filename1 =] 'filename_n'
數據庫文件的物理名稱,包括路徑。filename_n 的數據類型為 nvarchar(260),默認值為 NULL。最多可以指定 16 個文件名。參數名稱以 @filename1 開始,遞增到 @filename16。文件名列表至少必須包括主文件,主文件包含指向數據庫中其它文件的系統表。該列表還必須包括數據庫分離后所有被移動的文件。
下面我們來具體實現一下,首先將數據庫文件放到web項目app_data文件夾下,如下圖:
接下來,修改安裝類中的代碼,如下:
/// <summary> /// 安裝 /// </summary> /// <param name="stateSaver"></param> public override void Install(IDictionary stateSaver) { base.Install(stateSaver); string connectionString = GetConnectionString(null); try { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); string sql = "sp_attach_db 'HxjDB','" + Context.Parameters["targetdir"].ToString() + "App_Data/HxjDB_Data.MDF','" + Context.Parameters["targetdir"].ToString() + "App_Data/HxjDB_Log.LDF'"; ExecuteSQL(connection, sql); //ExecuteSQL(connection, GetResource("createdatabase.sql")); } } catch (Exception ex) { MessageBox.Show("數據庫安裝失敗!\n數據庫配置有誤,請正確配置信息!\n" + ex.Message, "出錯啦!"); this.Rollback(stateSaver); } }
其他沒有改變,然后就重新打包。然后安裝,在web項目下的數據庫就會被附加上去。
三、卸載
在示例中的做法在安裝的時候是沒有問題的,在卸載或者修復的時候,
/// <summary> /// 獲取數據庫登錄連接字符串 /// </summary> /// <param name="databasename">數據庫名稱</param> /// <returns></returns> private string GetConnectionString(string databasename) { return "server=" + Context.Parameters["server"].ToString() + ";database=" + (string.IsNullOrEmpty(databasename) ? "master" : databasename) + ";User ID=" + Context.Parameters["user"].ToString() + ";Password=" + Context.Parameters["pwd"].ToString(); }
這里是無法獲取正確的鏈接字符串,Context.Parameters["server"] 這些都已經不存在了,所以要想在卸載和修復的時候都可以用,則需要在安裝的時候保存連接字符串。
保存的位置和方式可根據自己的喜好存儲,畢竟連接字符串不是機密,自己方便自己就好了。要想卸載的時候執行UnInstall方法,需要在安裝項目中自定義操作中的卸載添加HxjDBInstall。如下圖: