1. 程式人生 > >C# winform 安裝程式打包(自定義操作)

C# winform 安裝程式打包(自定義操作)

(一),安裝程式

以前用vs製作過安裝程式,現在把步驟寫出來,有幫助的大家一定要頂哦

第一步:建立工程 1.開啟vs,新建專案->其他專案型別->安裝和部署(這個子項下面有安裝專案和Web安裝專案等,安裝專案就是普通的桌面程式安裝,Web安裝就是安裝網站,通常安裝到IIS下,這裡以普通桌面程式安裝為例),新建安裝專案,命名為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,很明顯的意義,就不用解釋了吧

//////////////////////////////////////////////////////////////////////////////安裝檔案例項程式碼(安裝後執行批處理)///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        public InstallerTest()         {             InitializeComponent();             //this.BeforeInstall += new InstallEventHandler(InstallerTest_BeforeInstall);             this.AfterInstall+=new InstallEventHandler(InstallerTest_AfterInstall);         }         private void InstallerTest_AfterInstall(object sender, InstallEventArgs e)         {             //throw new ApplicationException("suc ok");             string path = this.Context.Parameters["targetdir"];             string command = path + "\\a.bat

";             Process p = new Process();             p.StartInfo.FileName = "cmd.exe";             p.StartInfo = new System.Diagnostics.ProcessStartInfo(command);             p.StartInfo.UseShellExecute = false;             p.StartInfo.RedirectStandardInput = true;             p.StartInfo.RedirectStandardOutput = true;             p.StartInfo.CreateNoWindow = true;             p.Start();             p.StandardInput.WriteLine("exit");             p.Close();

        }

//////////////////////////////////////////////////////////////////////////////  END  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 5.完成了4中的InstallerTest_BeforeInstall方法,是不是在安裝之前就要執行 InstallerTest_BeforeInstall中的程式碼呢,答案是不行。還要用到“自定義操作編輯器”。專案SetupTest->新增 ->專案輸出->選擇Library後確定,你會發現,在專案SetupTest下面多了一項“主輸出來自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="[屬性值]",才能在程式碼中獲取改值。 8.其他:建立快捷方式,你可能在程式中要建立多個快捷方式,這裡展示一種寫程式碼的方式來建立快方式(各個選項意義就不說了,其中有些選項是可以不需要的,讀者可自己測試選擇使用) 新增引用:com名稱為Windows Script Host Object Model

               using IWshRuntimeLibrary;  string dk = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop);//得到桌面資料夾                 IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShellClass();                 IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(@dk + "//快捷方式到資料中心SiteDataCenter.lnk");                shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(@dk + "//網際網路公共上網服務場所資訊保安管理系統.lnk");                     shortcut.TargetPath = @"%HOMEDRIVE%/Program Files/Internet Explorer/IEXPLORE.EXE";                     shortcut.Arguments = "http://localhost/web/Main.html";// 引數                     shortcut.Description = "火星網路安全有限責任公司";                      shortcut.WorkingDirectory = pathWeb;//程式所在資料夾,在快捷方式圖示點選右鍵可以看到此屬性                     shortcut.IconLocation = "notepad.exe, 0";//圖示                      shortcut.Hotkey = "CTRL+SHIFT+N";//熱鍵                      shortcut.WindowStyle = 1;                      shortcut.Save();                       9.如何在安裝完成後自動執行某個程式呢(如run.exe)? 將這句程式碼寫在AfterInstall裡面:                 System.Diagnostics.ProcessStartInfo psiConfig = new System.Diagnostics.ProcessStartInfo(path + "http://www.cnblogs.com/lmjob/admin/file://run.exe");//path 即是安裝的目錄                 System.Diagnostics.Process pConfig = System.Diagnostics.Process.Start(psiConfig);

(二)解除安裝(以下是轉的,看客自己提取有用資訊)

1.新建一C# Windows From專案,完成專案的工作

2.選單-》檔案-》新增專案-》新建項-》安裝部署專案-》安裝嚮導

選擇上面那個專案的主輸出。

在安裝專案的屬性欄中會顯示出"XXX部署專案屬性",在第一個AddRemoveProgramsIcon屬性後"瀏覽"到你的ICO圖示,接著在下面Author輸入作者名,也就是你的名字,其他Localization是語言屬性,Manufacturer,ProductName的屬性將是使用者在安裝時預設設定的資料夾路徑一部分了,設定Title為你的應用程式標題名稱。

3.右擊"安裝專案"上,選擇檔案系統檢視

在應用程式資料夾,新增一個檔案,如果是WIN98下的安裝,請選擇WIN98作業系統目錄下的msiexec.exe檔案(一般在 c:/windows/system目錄下);如果是其他,比如WIN2K系列,請選擇該作業系統目錄下的msiexec.exe檔案(一般在 /winnt/system32目錄下)。

4.在檔案系統檢視的"使用者程式選單"裡,新增一個目錄,命名為專案的名字,

並且,在這個目錄裡,新增一個快捷方式,指向專案的主輸出,

再新增一個快捷方式,指向加入的檔案Msiexec.exe,命名為:"解除安裝",

5.在解決方案裡,選擇安裝專案,再開啟屬性檢視,開啟安裝專案的屬性面板,裡面有一項:

ProductCode {5284694C-24C1-4FCF-A705-D4B9A0081274}

把後面的{5284694C-24C1-4FCF-A705-D4B9A0081274},複製一下。

6.在"解除安裝"快捷方式的屬性裡,有一個叫Arguments的屬性欄,在屬性欄中首先填入"/x"後加一個空格,再"貼上",將ProductCode的屬性值COPY至此。

7、再在VS.Net的頂部選單欄中"生成"-"生成 XXXX"(XXXX為你的專案名稱)

補充:合併模組專案的使用

若在某個大型的安裝程式中,模組飛分為模組1,模組2等,每次都把模組N的檔案加進來重新編譯就很麻煩,這是就可用“合併模組專案(MergeModule)”。 1.新建一個合併模組專案,名字為MergeModule1,新增需要的檔案,生成後,將看到MergeModule1.msm 2.在這個大型的安裝程式中,新增“合併模組”,將MergeModule1.msm新增進去 3.生成,安裝,你會發現MergeModule1的內容也被安裝到了安裝目錄下