C# winform 安裝程式打包(自訂動作)

來源:互聯網
上載者:User

標籤:

(一),安裝程式

以前用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的內容也被安裝到了安裝目錄下

C# winform 安裝程式打包(自訂動作)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.