[VS2005]在封裝專案中加入修復、移除程式的捷徑

要在封裝專案中加入修復移除程式的捷徑可以這樣做,首先先用筆記本存入一個純文字的批次檔:

Uninstall.bat

Msiexec %1 %2

重點是要呼叫 Msiexec ,並支援引數帶入,若不喜歡批次檔的話,也可以使用 script 來處理,然後將這個檔加入應用程式目錄內,並在捷徑中指向這個檔。
在 Arguments 屬性中,加入參數的設定,例如:/i [ProductCode] ,兩個參數分別對應到批次檔的 %1 %2 。
Msiexec 是 MSI 類型安裝程式用的公用程式,細節可以參閱 MSDN : http://msdn2.microsoft.com/en-us/library/aa367988.aspx
在這邊比較有關的是:
  1. /i : 修復、移除程式
  2. /x : 移除程式
依需求調整參數。
[ProductCode] 則是產品代碼,這會由 VS2005 產生,每次版本變更時,都會自動產生新的編碼,所以我們不要直接複製這個編碼,而是用封裝程式提供的命名變數來處理,這樣在安裝好時,捷徑會帶入這次封裝版本的產品代碼。
由於使用批次檔,所以修復、移除時,會出現命令提示字元的黑視窗,不想看到這個視窗的話,可以變更 ShowCmd 屬性為 vsdscMinimized 。
安裝完專案後,可以看到捷徑內已包含修復、移除程式可供使用者點選。
更進一步
這個捷徑畢竟透過批次檔來執行,而且圖示也醜醜的,又會產生命令提示字元的黑視窗,很多系統都是直接呼叫 Msiexec ,而且圖示也很美觀,要怎樣處理呢?
這時候就需要微軟提供編修 MSI 檔的公用程式:orca.exe (下一篇再來說這個)
使用 orca.exe 開啟你的專案產生的 setup.msi 後,左邊的 Tables 選捷徑表格 (Shortcut table) ,把專案中的修復、移除程式這列進行變更,要變更的欄位有三:
  1. Target : 改為 [SystemFolder]\Msiexec
  2. Icon : 改為空白
  3. IconIndex : 改為空白
我們已經在 VS2005 中設好 Arguments 欄位屬性了,所以這次不用動,[SystemFolder] 代表系統目錄,大部分的作業系統是 C:\Windows\system32\ ,由於我們要使用執行檔預設圖示,所以這邊就不用指定圖示,才把 Icon 相關屬性改為空白。
重新安裝專案後,可以發現修復、移除程式的捷徑已經變成比較美觀的圖示了。不過可惜的是每次 VS2005 重建完,都要手動做一遍,會有點煩。
Categories: 封裝部署, 技術分享 | 3 則迴響

文章導覽

3 thoughts on “[VS2005]在封裝專案中加入修復、移除程式的捷徑

  1. Iping

    其實,在"捷徑"的屬性"Icon"直接指定Icon的圖示即可,無需使用orca.exe喔!:)比較麻煩的是要先找到你喜歡的ico檔才行,如果懶得找,在.net framework的預設目錄有一個「setup.ico」可以供你使用,以上小小建議。

    喜歡

  2. 子璉

    此操作目的是:
    1. 使用系統圖示,使用者能有統一圖形一目了然
    2. 不同 OS 版本系統圖示略為不同
    3. 重新封裝圖示有散佈權問題
    4. 封裝圖示會增加檔案大小,增加檔案的依賴性,必須圖示檔存在安裝目錄內,才可指定。

    選擇自訂圖示是小事,在屬性或線上手冊都可以直接找到,這邊介紹的是線上手冊找不到或是很難找的東西。

    喜歡

  3. peko

    謝謝璉大:
    使用VS2010也可以依照這篇文章的說明設定好移除程式的捷徑(我是用使用批次檔方式),解決了我很大的一個困擾,感謝您!

    喜歡

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

在 WordPress.com 建立免費網站或網誌.

%d 位部落客按了讚: