1.使用VS 自帶的打包工具,制作winform安裝項目
開發環境:VS 2008 Access
操作系統:Windows XP
開發語言:C#
步驟:
第一步:打開開發環境VS2008,新建項目,選擇其他項目類型,再選擇"安裝項目",輸入名稱及選擇安裝路徑;

第二步:進入文件系統選項卡,選擇應用程序文件夾,在中間的空白區域右鍵選擇"添加文件",添加項目文件(exe,dll);

第三步:添加項目所需文件;這里有兩個文件夾需要注意(DataBase和Report),因為DataBase是存儲項目數據庫,而Report則是存儲項目所需的報表文件.rpt,因此呢,在應用程序夾中也需要建同名的文件夾,並且添加所需的文件。
效果:

第四步:為了在開始程序菜單中和桌面應用程序中看到安裝程序,這里我們就需要為項目創建快捷方式。
右鍵選擇可執行文件(PersonFinance.exe),創建快捷方式,進行重命名"**公司**管理系統",將該快捷方式拖放到 '用戶的"程序"菜單' 中。重復該步驟將新建的快捷方式添加到 "用戶桌面" 文件夾中
最好在用戶菜單中建立一個文件夾,存放安裝程序

第五步:設置系統必備,右鍵選擇安裝項目,進入屬性頁中,單擊"系統必備"按鈕,進入系統必備對話框;
勾選"創建用於安裝系統必備組件的安裝程序",在安裝系統必備組件列表中,選擇
1)、Windows Installer 3.1(必選)
2)、.NET Framework 3.5 (可選)參考最后說明
3)、Crystal Report Basic for Visual Studio2008(x86,x64) (可選) 項目中用到了水晶報表就需要勾選此項
重要一點:勾選"從與我的應用程序相同的位置下載系統必備組件(D)",其實意思就是說你勾選后,生成安裝項目時,在你安裝項目的路徑下,會有你在系統必備組件列表中勾選的組件.(系統自動完成,這一點還不錯,不需要你自己去下載組件)

第六步:卸載程序,因為安裝包做好之后不能只有安裝程序,還要有卸載程序
首先呢,在"C:\WINDOWS\system32"路徑下,找到msiexec.exe 添加到應用程序文件夾中,創建快捷方式,並命名"卸載管理系統"或"Uninstall"
其次呢,選擇安裝項目的ProductCode

右鍵選擇卸載程序的快捷方式,進入屬性,在Arguments選項中 輸入/x 及ProductCode; 例如:/x {6931BD71-5C5E-4DA1-A861-14C7D1A78B97}
將卸載程序同時存放到用戶的開始菜單的文件夾中(在第四步中新建)
第七步:更改安裝程序屬性,右鍵選擇安裝項目屬性,可以設置項目作者及名稱,其他屬性信息可以根據實際情況進行設置.

第八步:生成安裝項目生成時,會出現些警告:
應將“msiexec.exe”排除,原因是其源文件“C:\WINDOWS\system32\msiexec.exe”受到“Windows 系統文件保護”;
兩個或多個對象具有相同的目標位置(“[targetdir]\model.dll”)
解決方案:
第一種:都不處理
第二種:第一類警告,可以編寫卸載程序
第二種警告:刪除相同的文件
安裝項目制作完畢.

注意:
1、.net framework 框架是可選的,不一定說你采用的是VS2008開發就必須要使用.net framework 3.5,只要你在程序中沒有使用到.net framework 3.5 的特性比如(LINQ),那么你選擇框架時,是可以選擇2.0的,為什么?因為2.0只有20多MB,而3.5則有200多MB。
更改方式:在安裝項目下面有個檢測到的依賴項文件,雙擊里面的Microsoft .net framework,進入了啟動條件選擇卡,右鍵選擇.net frmaework 在Version中選擇你所需的.net framework框架



2.VS2005 打包,並自動安裝SQL數據庫
一).創建部署項目
1. 在“文件”菜單上指向“添加項目”,然后選擇“新建項目”。
2. 在“添加新項目”對話框中,選擇“項目類型”窗格中的“安裝和部署項目”,然后選擇“模板”窗格中的“安裝項目”。在“名稱”框中鍵入 setup1。
3. 單擊“確定”關閉對話框。
4. 項目被添加到解決方案資源管理器中,並且文件系統編輯器打開。
5. 在“屬性”窗口中,選擇 ProductName 屬性,並鍵入 信息管理系統 。
二).將 主程序 項目的輸出添加到部署項目中
1. 在“文件系統編輯器”中,選擇“應用程序文件夾”。在“操作”菜單上,指向“添加”,然后選擇“項目輸出”。
2. 在“添加項目輸出組”對話框中,選擇“項目”下拉列表中的“你的程序”。
3. 單擊“確定”關閉對話框。
4. 從列表中選擇“主輸出”和“內容文件”組,然后單擊“確定”。
三).創建安裝程序類
1. 在“文件”菜單上指向“新建”,然后選擇“項目”。
2. 在“新建項目”對話框中,選擇“項目類型”窗格中的“Visual Basic 項目”,然后選擇“模板”窗格中的“類庫”。在“名稱”框中鍵入 installDB。
3. 單擊“打開”關閉對話框。
4. 從“項目”菜單中選擇“添加新項”。
5. 在“添加新項”對話框中選擇“安裝程序類”。在“名稱”框中鍵入 installDB。
6. 單擊“確定”關閉對話框。
7. 詳細代碼附后。
四).創建自定義安裝對話框
1. 在解決方案資源管理器中選擇“setup1”項目。在“視圖”菜單上指向“編輯器”,然后選擇“用戶界面”。
2. 在用戶界面編輯器中,選擇“安裝”下的“啟動”節點。在“操作”菜單上,選擇“添加對話框”。
3. 在“添加對話框”對話框中,選擇“許可協議”對話框,然后單擊“確定”關閉對話框。
4. 在“添加對話框”對話框中,選擇“文本框 (A)”對話框,然后單擊“確定”關閉對話框。
5. 在“操作”菜單上,選擇“上移”。重復此步驟,直到“文本框 (A)”對話框位於“安裝文件夾”節點之上。
6. 在“屬性”窗口中,選擇 BannerText 屬性並鍵入:安裝數據庫.
7. 選擇 BodyText 屬性並鍵入:安裝程序將在目標機器上安裝數據庫
8. 選擇 Edit1Label 屬性並鍵入:數據庫名稱:
9. 選擇 Edit1Property 屬性並鍵入 CUSTOMTEXTA1
10. 選擇 Edit1Value 屬性並鍵入:dbservers
11. 選擇 Edit2Label 屬性並鍵入:服務器名:
12. 選擇 Edit2Property 屬性並鍵入 CUSTOMTEXTA2
13. 選擇 Edit2Value 屬性並鍵入:(local)
14. 選擇 Edit3Label 屬性並鍵入:用戶名:
15. 選擇 Edit3Value 屬性並鍵入:sa
16. 選擇 Edit3Property 屬性並鍵入 CUSTOMTEXTA3
17. 選擇 Edit4Label 屬性並鍵入:密碼:
18. 選擇 Edit4Property 屬性並鍵入 CUSTOMTEXTA4
19. 選擇 Edit2Visible、Edit3Visible 和 Edit4Visible 屬性,並將它們設置為 true
五).創建自定義操作
1. 在解決方案資源管理器中選擇“setup1”項目。在“視圖”菜單上指向“編輯器”,然后選擇“自定義操作”。
2. 在自定義操作編輯器中選擇“安裝”節點。在“操作”菜單上,選擇“添加自定義操作”。
3. 在“選擇項目中的項”對話框中,雙擊“應用程序文件夾”。
4. 選擇“主輸出來自 installDB(活動)”項,然后單擊“確定”關閉對話框。
5. 在“屬性”窗口中,選擇 CustomActionData 屬性並鍵入“/dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]\"”。
附:/targetdir="[TARGETDIR]\"是安裝后的目標路徑,為了在installDB類中獲得安裝后的路徑,我們設置此參數。
六).添加文件
1. 將SQL Server備份成文件DB.dat添加到“setup1”項目(在企業管理器中右擊數據庫->所有工作->備份數據庫,備份成一個文件,取名為DB.dat)
2. 將安裝文件LisenceFile.rtf添加到“setup1”項目
3. 在用戶界面編輯器中,選擇許可協議,設置LisenceFile屬性為LisenceFile.rtf文件
4.一般會自動將依賴項添加到“檢測到的依賴項”,如果沒有,那么我們要手動將其加入步驟5)
Crystal_Managed2003.msm (如果有水晶報表)
dotnetfxredist_x86.msm (.net一定是必須的)
... (如果有引用其他的dll)
5. 如果使用了水晶報表,手動加入要包含的文件:項目-->添加-->合並模塊(添加你的程序文件) (包括dotNetFramework和MDAC27),位於:C:\Program Files\Common Files\Merge Modules\ 下,*為必要的
具體功能如下:
(托管組件 MSM 處理所有托管組件的分發,其中包括 Windows 窗體查看器、Web 窗體查看器和所有 Crystal Decisions 命名空間)
* Crystal_Managed2003.msm
Crystal_Managed2003_chs.msm
(對於使報表運行所需的所有其他文件,由數據庫訪問 MSM 處理其分發。其中包括數據庫、導出和圖表驅動程序。)
* Crystal_Database_access2003.msm
Crystal_Database_access2003_chs.msm
(KeyCode MSM 處理 Crystal Decisions 密鑰號碼的安裝,注意是添加合並模塊,否則沒有“MergeMouduleProperties”屬性)
* Crystal_regwiz2003.msm
(如果報表文件使用了 ADO.NET 的 dataset 數據集對象,那么 VC_User_CRT71_RTL_X86_---.msm 和 VC_User_STL71_RTL_X86_---.msm 模塊也必須包含在安裝工程中。而且這兩個模塊的文件安裝屬性的"Module Retargetable Folder"項必須修改成為系統目錄)
VC_User_CRT71_RTL_X86_---.msm
VC_User_STL71_RTL_X86_---.msm
(很多人經常出現查詢錯誤,不妨加上這個)
5. 打開解決方案-->右鍵點擊Crystal_regwiz2003.msm的屬性,在“MergeMouduleProperties”里的 “License Key”填入:AAP5GKS0000GDE100DS(這個是你生成Crystal Report是用到的注冊號的密碼!)
七).打包時加入卸載功能:
方法一:
1.在打包項目中添加文件msiexec.exe(一般可在c:\windows\system32\下找到)
2.在文件系統視圖中選擇應用程序文件夾,在msiexec.exe上按右鍵,選擇創建快捷方式,重命名快捷方式為"卸載".
3.更改此快捷方式的Arguments 為"/x {產品id}",產品id的值為打包項目的ProductCode屬性值.
方法二:(推薦)
1.先生成安裝包,記下ProductCode(選擇解決方案資源管理器根目錄如setup1,再查看屬性標簽,不是右鍵中的屬性),下面要用到
2.用VS.net建立一個新的控制台程序uninst.exe文件
'power by: landlordh
'for 2000,xp,2003
Module uninstall
Sub Main()
Dim myProcess As Process = New Process
If System.Environment.OSVersion.ToString.IndexOf("NT 5") Then
myProcess.Start("msiexec", "/X{2B65D4A9-C146-4808-AB4B-321FB0779559}") '改為自己的ProductCode
End If
myProcess.Close()
End Sub
End Module
3.將控制台程序BIN目錄的exe文件加入到打包程序文件中
方法二:
C#的c/s的winform,數據庫為sql2k,
應用程序包括如下文件:
1.exe,1.dll,1.jpg,1.xml,donetsetup.exe以及數據庫文件1.mdf,1.ldf(或數據庫安裝文件1.sql)。
打包要求:
(1)自動檢測是否安裝donet環境,如沒安裝,則提示自動安裝。
(2)安裝時自動安裝數據庫(附加mdf或運行1.sql)。
(3)在安裝界面上能自定義一些安裝圖片或提示。
安裝項目:
六個子項:文件系統、注冊表、文件類型、用戶界面、自定義操作、啟動條件。
其中我們在打包過程中經常要用到的有文件系統、注冊表、用戶界面和自定義操作。
文件系統:
向應用程序文件夾、用戶的程序菜單、用戶桌面下輸出項目文件(四種類型:文件夾、項目輸出、文件和程序集),還可以創建快捷方式(一般是放在桌面或程序菜單中)文件系統編輯器表示目標計算機上的文件系統,使用該工具可以指定應用程序文件安裝的位置。在大多數情況下,希望將應用程序文件放在 Application Folder 中或在 Application Folder 下創建的子文件夾中。安裝在目標計算機上以后,來自 Application Folder 的文件將位於 Program Files/Manufacturer/ProductName文件夾中,其中 Manufacturer 是安裝 Visual Studio 時使用的公司名,而 ProductName 是用於部署項目的名稱。可以在安裝項目的屬性窗口中重寫這兩個設置。
注冊表:
可以向注冊表中插入鍵,在安裝應用程序的同時創建注冊表項。
用戶界面:系統自動提供一組在安裝期間顯示的默認對話框。根據正在構建的項目的類型,所提供的這組對話框有所不同。使用用戶界面編輯器,可以將對話框重新排序或刪除對話框。在編輯器中顯示的對話框樹包含兩部分:安裝與管理員安裝。安裝部分包括終端用戶運行安裝程序時顯示的對話框,而管理員安裝部分包含系統管理員將安裝程序上傳到某個網絡位置時顯示的對話框。如果想構建一個沒有用戶界面的安裝,只需在對話框樹上刪除安裝部分中的所有對話框。或者,可以從一組可用的模板將對話框添加到安裝項目中。
啟動條件:使用啟動條件編輯器來定義成功運行安裝所必須滿足的條件。例如,可以檢查特定版本的操作系統。如果用戶嘗試在一個不滿足條件的系統上安裝,安裝將中止。還可以配置啟動條件來搜索目標計算機上的某個特定文件、注冊表項或組件。在開始安裝時,Windows Installer 執行搜索和條件評估,並按啟動條件編輯器中所示的順序執行。
自定義操作:
自定義操作提供了一種在安裝結束時執行任務的機制。例如,您可能希望在安裝應用程序之前先配置好數據庫,此時您可以用自定義操作來完成數據庫的創建。自定義操作構建為單獨的 .dll 或 .exe 文件,然后使用自定義操作編輯器添加到項目中,其中這些操作與不同的安裝階段有關。自定義操作編輯器包括幾個單獨的文件夾,用於放置執行 Install、Commit、Rollback 或 Uninstall 任務的二進制文件。
InstallerClass屬性:如果添加的自定義操作是繼承自Installer類(注意放在哪個文件夾下就要重載哪個相應的方法),該屬性設為True,否則該屬性設為False(注意:為False時要指定.dll文件的入口——EntryPoint屬性)。
卸載:
可以在安裝應用程序中提供一個卸載的快捷方式,借助於系統提供的卸載程序msiexec.exe(在c:/windows/system32目錄下),並把安裝程序項目的ProductCode屬性值賦給快捷方式的Arguments屬性(注意:在屬性值前加/x)
安裝程序類:
System.Configuration.Install命名空間下
Installer類有四個可以重載的方法,分別是Install,Commit,Rollback,Uninstall。
分別對應於自定義操作中的四個文件夾:安裝、提交、回滾、卸載。
數據庫安裝:
2、 執行創建數據庫的Sql語句
3、 完全備份的數據庫文件還原
可以將能生成數據庫的的文件(分離的數據庫文件、Sql腳本文件或完全備份文件)部署到應用程序文件夾下,然后在重載的Install方法里加入生成數據庫代碼(注意:生成數據庫的代碼應該在調用基類的Install方法后)。
數據庫的卸載:首先刪除數據庫,再調用基類的Uninstall方法刪除應用程序文件夾里的文件(順序不能亂)。
幾個特殊點:
2、 創建快捷方式(在程序中創建,可以有作為附加任務,根據用戶的選擇情況,有選擇的創建):
添加引用:COM 選項卡並選擇 Windows Script Host Object Model
創建對象:創建一個 WshShell 的實例對象,接着通過該對象的 CreateShortcut 方法來創建 IWshShortcut 接口的實例對象,傳遞給 CreateShortcut 方法的參數是將要創建的快捷方式的完整路徑(包括該快捷方式的名字)。
設置屬性:TargetPath、WorkingDirectory、WindowStyle、Description、IconLocation
生成快捷方式:調用 IWshShortcut.Save 方法生成快捷方式文件。

