C# 制作安装包
1、創(chuàng)建安裝程序
打開VS2008,新建->Project,選擇Other Project Deployment->Setup and Deployment,選擇SetupProject模板。取名SetupTest。
創(chuàng)建項(xiàng)目之后一個(gè)什么都沒有的安裝包就做好了。安裝包一般會(huì)在Program Files創(chuàng)建一個(gè)安裝文件,然后在文件夾中放一些文件。
右鍵點(diǎn)擊SetupTest,點(diǎn)擊菜單View->File System,在File System視圖中,可以看到三個(gè)文件,一個(gè)是Application Folder,User’s Destop, User’s Programs Menu。Application Folder文件夾中的內(nèi)容會(huì)輸出到Program Files下的安裝目錄下。所以我們可以往這個(gè)文件夾中添加內(nèi)容。右鍵點(diǎn)擊Application Folder,點(diǎn)擊Add->File菜單,就可以添加文件到這個(gè)文件夾中。當(dāng)然安裝程序一般安裝的是可執(zhí)行程序。
在同一個(gè)項(xiàng)目中,我們新建一個(gè)winform項(xiàng)目取名WinformTest。編譯WinformTest項(xiàng)目。
右鍵點(diǎn)擊Application Folder,點(diǎn)擊Add->Project Output…,在彈出的對(duì)話框中,選擇WinformTest項(xiàng)目,在列表中選擇Primary output。點(diǎn)擊Ok,這樣我們就會(huì)把WinformTest.ext添加到Application Folder文件中。
安裝程序一般還會(huì)在桌面和啟動(dòng)菜單中添加快捷方式,我們可以在Application Folder中,右鍵選擇Prmary output from WinformTest(Active),創(chuàng)建一個(gè)快捷方式,然后把快捷方式,復(fù)制到User’s Desktop和User’s Programs Menu中去。好現(xiàn)在安裝程序可以安裝了。如果在安裝目錄中已經(jīng)存在相同的文件,則安裝程序不會(huì)進(jìn)行覆蓋。
2、一些基本的配置
點(diǎn)擊SetupTest項(xiàng)目,然后打開屬性面板(和通過右鍵,然后點(diǎn)擊屬性菜單是不同的)。有很多屬性可以配置,比如ProductName(產(chǎn)品的名稱),Subject(主題),Title等,設(shè)置這些屬性,在安裝的時(shí)候就可以看到一些自己設(shè)定的名稱。
那安裝路徑如何確定的呢?
還是視圖->文件系統(tǒng),選擇Application Folder,然后打開屬性面板,在DefaultLocation配置項(xiàng)中就是配置安裝路徑的??梢詫?duì)這個(gè)目錄進(jìn)行修改,這是默認(rèn)的目錄。
3、自定義動(dòng)作
在上面的那個(gè)項(xiàng)目中添加一個(gè)類庫,取名Install,添加一個(gè)Installer Class。這個(gè)累中就可以添加一些自己的代碼。我們可以重寫Install方法
public override void Install(IDictionary stateSaver)
這個(gè)方法會(huì)在文件復(fù)制后,也就是Application Folder中的文件復(fù)制到安裝目錄后執(zhí)行。
我們也可以重寫Uninstall方法
public override void Uninstall(IDictionary savedState)
Unistall方法會(huì)在安裝目錄下文件被刪除前執(zhí)行。如何你在Install復(fù)制了一些目錄到其他文件夾中,卸載時(shí)這么文件是不會(huì)刪除的,那么就可以通過Unistall方法來刪除。
關(guān)聯(lián)Install類到SetupTest裝項(xiàng)目中
編譯Install項(xiàng)目,在SetupTest->View->File System視圖中,點(diǎn)擊Application Folder,安裝上面的步驟把Install的項(xiàng)目主輸出添加到Application Folder中。
右鍵點(diǎn)擊SetupTest->Add->Custom Actions,我們可以看到四個(gè)文件夾Install(安裝時(shí)執(zhí)行的自定義動(dòng)作),….,Unistall(卸載時(shí)執(zhí)行的自定義動(dòng)作)。
右鍵點(diǎn)擊Install文件夾,點(diǎn)擊Add Custom Action菜單,在彈出的對(duì)話框中,選擇Application Folder,然后選擇Install項(xiàng)目的主輸出。這樣當(dāng)執(zhí)行安裝程序是就會(huì)執(zhí)行Install方法中代碼。同理如果想執(zhí)行Uninstall方法,那就把Install項(xiàng)目主輸出添加到Uninstall文件夾中。
當(dāng)我們?cè)贗nstall和Uninstall方法中些代碼時(shí),想獲得一些參數(shù),比如安裝文件的路徑。
在自定義動(dòng)作的Install文件下,點(diǎn)擊Primary output from Install(Install的項(xiàng)目主輸出),打開屬性面板,可以看到一個(gè)CustomActionData配置項(xiàng),可以在這個(gè)配置項(xiàng)中傳遞參數(shù),并可以在Install方法中獲取。比如傳遞安裝目錄,那在CustomActionData添加/tardir="[TARGETDIR]/"文字,也可以同時(shí)傳遞安裝程序目錄(也就是SetupTest.exe文件的路徑) /sourcedir="[SOURCEDIR]/" /tardir="[TARGETDIR]/",注意兩個(gè)參數(shù)之間是有空格的,而且后面比如帶/符號(hào),前面必須帶/符號(hào)。其實(shí)TARGETDIR,就是目錄路徑選擇框的名稱。當(dāng)我們自己創(chuàng)建一個(gè)對(duì)話框時(shí),會(huì)有很多輸入框,每個(gè)輸入框都有名字,我們也可以可以通過這種方式把用戶輸入的數(shù)據(jù)傳遞過去。
在Install方法中獲取參數(shù)
m_Targetdir = this.Context.Parameters["tardir"].ToString();
?
4、調(diào)試
想進(jìn)行調(diào)試需要把Install項(xiàng)目的調(diào)試符號(hào)添加到Application Folder文件夾中。
安裝項(xiàng)目也是可以進(jìn)行調(diào)試的,當(dāng)然SetupTest是不需要調(diào)試的,因?yàn)樗皇菑?fù)制文件,如果想看到SetupTest包含了哪些文件,可以通過右鍵點(diǎn)擊SetupTest,點(diǎn)擊屬性菜單。在Package files下拉框中選As? loose uncompressed files,點(diǎn)擊確定,然后編譯SetupTest項(xiàng)目,在輸出目錄中可以看到需要的文件。那我們主要是調(diào)試Installer類中的方法,比如Install方法。如果想調(diào)試Install方法,可以在Install方法的第一行的代碼出寫
MessageBox.Show(“debug”);
這句代碼會(huì)彈出一個(gè)對(duì)話框。安裝程序在執(zhí)行到這句代碼時(shí)會(huì)彈出一個(gè)對(duì)話框,這時(shí)我們回到Visual Studio,點(diǎn)擊debug->Attach a Process…,選中Show processes from all users和Show processes in all sessions顯示所有的進(jìn)行,在進(jìn)程列表中我們可以看到多個(gè)msiexec.exe進(jìn)程,找到MessageBox所在的進(jìn)行,然后點(diǎn)擊附加,這樣就可以進(jìn)行調(diào)試了。
總結(jié)
- 上一篇: Remoting实例(同为客户端服务端)
- 下一篇: .NET(C#)连接各类数据库