1. 程式人生 > >Visual Studio 工程製作程式安裝包

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) 路徑之下。