Visual Studio 工程製作程式安裝包
目的描述:用Visual Studio 2010開發的工程,已經編譯開發完成,需要將工程打包成安裝包。
(1)準備執行檔案
程式編譯後後生成Release 資料夾,裡面有exe可執行檔案。 將這個檔案複製出來,執行按照提示將缺少的dll執行庫都複製到這個資料夾中,直至exe執行而不報錯。 (我採用的編譯方法是靜態編譯)
(2)建立安裝包工程
啟動Visual studio 2010,“檔案”→“新建”→“專案”,選擇“其他專案型別”→“安裝和部署”→“Visual Studio Installer”,然後選擇“安裝專案”。預設名稱為“Setup1”。
(3)目標計算機上的檔案系統
第2步點選“確定”後,會出現下圖所示的介面。
其中:
“應用程式資料夾”:存放要打包的檔案,包括exe、dll、ico等,以及其他程式執行所需檔案。
“使用者的‘程式’選單”:程式安裝完成後,在“開始選單”顯示的內容。
“使用者桌面”:一般存放應用程式的快捷方式,即安裝包安裝完成後再桌面上顯示的快捷方式。
(4)製作安裝包
1 新增應用程式檔案
將可以執行的Debug/Release資料夾下的檔案拖入到“應用程式資料夾”中。
(如果Debug/Release下也有資料夾,那麼需要右鍵單擊“應用程式資料夾”,建立與之完全對應的資料夾,並將各資料夾中的檔案拖入到對應的資料夾中)
2.製作程式快捷方式
右鍵單擊exe檔案,選擇建立快捷方式,並根據自己的需要重新命名
為快捷方式設定ICO圖示:右鍵點選快捷方式檔案,選擇“屬性視窗”,找到“Icon”。在這裡設定快捷方式的圖示。把快捷方式的圖示設定成之前放入應用程式資料夾中的ico檔案。
這樣有圖示的程式快捷方式就做完了,將
在“使用者的‘程式’選單”下新增資料夾,以程式的名稱命名(例如我的專案名稱是CFU,這個新建資料夾就叫"CFU")。然後將這個快捷方式檔案拖入到這個新建的CFU資料夾中。
用與上同樣的方式,再製作一個快捷方式,拖入到“使用者桌面”資料夾下,作為桌面啟動的快捷方式。
3.製作程式解除安裝的快捷方式資料夾
製作解除安裝程式,我們需要Windows自帶的程式msiexec.exe
右鍵單擊“應用程式資料夾”→“新增”→“檔案”,選擇“C:\Windows\System32\msiexec.exe”,將msiexec.exe新增進來。然後右鍵建立快捷方式,更名為“uninstall”。
右鍵單擊該快捷方式,選擇屬性,找到Arguments一項,在該項中填入“/x+空格+ProductCode”(引號不要寫)。
/x {5E971BBA-EB51-4C28-8785-AEA08A5B2532}
“ProductCode”可在工程屬性中找到。
在第二步建立的CFU資料夾下新增uninstall資料夾,將剛剛建立的uninstall 快捷方式拖入到這個資料夾中。
4.修改安裝包屬性
右鍵單擊工程,選擇“屬性”。在這裡你可以按照自己的需求更改一些屬性。
5.修改程式預設安裝目錄
右鍵單擊“應用程式資料夾”,選擇“屬性視窗”,可以看到如下圖所示。
“DefaultLocation”一項即為預設安裝目錄,包含三部分“ProgramFilesFolder”、“Manufacturer”、“ProductName”。你可以刪除“Manufacturer”以使程式安裝時,略去建立Manufacturer目錄。
(5)編譯生成
選單欄中選擇 生成 下面的第三項,生成安裝包程式。
生成成功後項目資料夾中會出現下面兩個檔案,兩個都是可以執行的安裝包程式:
可能出現的問題: 警告: 應將“msiexec.exe”排除,原因是其原始檔“C:\Windows\System32\msiexec.exe”受到“Windows 系統檔案保護”。
解決的方法:1.不管這個警告,安裝包執行後uninstall 快捷方式仍然可以正常的解除安裝程式(我就是這樣的)2.如果不行使用第二種方法:(參考VS2005打包時加入解除安裝功能)
2.1先生成安裝包,記下ProductCode,下面要用到
2.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
2.3將控制檯程式BIN目錄的exe檔案加入到打包程式檔案中,在程式組建立uninst.exe的快捷方式
(6)效果
(7)遇到的問題:製作出來的安裝包正常安裝後,執行出的結果與源程式結果不同。
問題分析:後來經過大量的測試後發現用安裝包安裝程式,如果選擇安裝路徑在 C:\Program Files 或 C:\Program Files (x86) 資料夾下執行出來的結果就會和本來程式的執行效果不同。 甚至我把未打包的程式執行檔案直接複製到 C:\Program Files也不能正常執行。 (我覺得應該是與在C:\Program Files資料夾下操作需要管理員許可權有關)
解決方法:製作安裝包時修改預設安裝路徑,而且用安裝包進行程式安裝時不能將和程式安裝在C:\Program Files和C:\Program Files (x86) 路徑之下。