標籤:使用 檔案 資料 io for cti 代碼 ar
第一步:建立工程
1.開啟vs,建立項目->其他項目類型->安裝和部署(),建立安裝項目,命名為SetupTest。 2.建立工程後,可以在“方案總管”裡面看到子項:檔案系統編輯器,登錄編輯程式,檔案類型編輯器,使用者介面編輯器,自訂動作編輯器,啟動條件編輯器。下面將會舉例來說明各個地方怎麼使用。
3.最簡單的一個安裝程式:點擊“檔案類型編輯器”,找到“應用程式檔案夾”,添加->檔案,選擇你要打包的程式檔案(譬如我的程式有run.exe和lib.dll組成),確定。在項目“SetupTest”上點擊產生,一個簡單的安裝包就做好了。產生後,點擊安裝,如果沒有錯誤的話,你現在可以看到你的安裝包的效果了。
4.如何自訂代碼?在製作過程中,這些簡單的功能不能滿足你的要求,那麼就自己寫代碼來完成吧。
解決方案->添加->建立項目->類庫,命名為Library,在項目Library下面,刪除Class1.cs,添加->建立項目->安裝程式類(名稱為InstallerTest.cs),開啟InstallerTest.cs,你會發現這個class InstallerTest繼承自Installer,裡面就一個建構函式。好了,現在安裝程式不能完成的功能,你可以在這個類寫代碼來自己實現了。 舉例:在建構函式裡面添上this.BeforeInstall += new InstallEventHandler(InstallerTest_BeforeInstall),實現方法
InstallerTest_BeforeInstall(object sender, InstallEventArgs e),就可以完成程式在安裝之前要做的事情了,Installer主要要用到的事件不外乎這幾個:BeforeInstall,AfterInstall,AfterRollback,AfterUninstall,BeforeRollback,BeforeUninstall,很明顯的意義,就不用解釋了吧
5.完成了4中的InstallerTest_BeforeInstall事件,是不是在安裝之前就要執行
InstallerTest_BeforeInstall中的代碼呢,答案是不行。還要用到“自訂動作編輯器”。項目SetupTest->添加->項目輸出->選擇Library->選擇主輸出和內容檔案後確定,你會發現,在項目SetupTest下面多了一項“主輸出來自Library(活動)” 和一項“內容檔案來自
Library(活動)”的字樣。好,到正題了,來到“自訂動作”處,可以看到四個子項:安裝,提交,復原,卸載。在安裝上面點擊右鍵->添加自訂動作->選擇“主輸出來自Library(活動)”。這樣,重建後,安裝之前就會執行InstallerTest_BeforeInstall代碼了。(當然,如果你在要在卸載前後做一些事情,就必須在“卸載”處也把自訂動作添加進去,否則即使監聽了事件AfterUninstall,也不會執行的,完全之策是在安裝,提交,復原,卸載裡面都把主輸出來自Library(活動)添加進去就不怕了,嘿嘿)
6.如何得到使用者所選安裝路徑?在實現代碼的時候,使用者所選安裝路徑大多數情況下都要用到,怎麼得到他的值呢?在自訂動作->安裝->“主輸出來自Library(活動)”上面右鍵屬性,在CustomActionData中填入/targetdir="[TARGETDIR]\", 然後在類InstallerTest中用這句話this.Context.Parameters["targetdir"] 就可以取得安裝的目錄了。
7.如何得到使用者在安裝的時候輸入的更多的資訊?使用者在安裝的時候,還有可能塡很多其他的資訊,比如我以前做的一個安裝檔案中包含安裝資料庫,安裝的時候使用者就要填寫資料庫密碼,使用者名稱等資訊。實現如下:使用者介面->安裝->啟動->右鍵->添加對話方塊->選擇"文字框(A)",可以看到文字框(A)有很多屬性,如:Edit1Label,Edit1Property,Edit1Value,Edit1Visible等,Edit1Label就是這個輸入框所要輸入的內容的提示,Edit1Value就是所輸入的內容。 例如:將Edit1Label內容填上“請輸入資料庫使用者名稱:”,將Edit1Property內容填上DBUSER,Edit1Visible選問true,另外在6中所提到的CustomActionData中,添加上 /dbuser="[DBUSER]",再在InstallerTest中用這句話this.Context.Parameters["dbuser"] 就可以或得使用者在安裝的時候所填寫的使用者名稱了(其他的單選框,複選框,button按鈕框都差不多擷取值的方法,不再累贅).總之,添加了一些對話方塊後,把屬性好,還要在CustomActionData添加一個/parm="[屬性值]",才能在代碼中擷取改值。
註:如果想要在CustomActionData中添加多個參數,則用空格隔開,如果參數是路徑,格式為/parm="[屬性值]\"
8.刪除安裝檔案。上面的都做好了,一個安裝程式就基本完成了。運行剛做好的安裝程式,提示安裝完成,這時如果你開啟安裝目錄會發現許多.tmp檔案。這是安裝時用到的臨時檔案,在最後應該刪掉。仿照4添加一個InstallerTest_AfterInstall事件,在事件中寫刪除代碼。思路:取出安裝目錄下的所有檔案,篩選出.tmp檔案並將它們刪除。下面是我的作法:
File.Delete(this.Context.Parameters["targetdir"]+"test"); string[] filenames =
Directory.GetFiles(this.Context.Parameters["targetdir"]); int i = 0;
while (i<filenames.Length&& filenames[i] != null) {
if (filenames[i].Substring(filenames[i].Length - 3, 3)=="tmp") {
File.Delete(filenames[i]); } i++;
}
注意:要引入System.IO命名空間。