簡體   English   中英

以編程方式獲取Visual Studio安裝項目的ProductCode for Application

[英]Programmatically Getting Visual Studio Setup Project's ProductCode for Application

我有一個使用Visual Studio的安裝和部署創建的安裝程序 ,通常做得很好。

有時我的一個版本存在缺陷,我需要一種方法來快速扭轉我的決定,進行神話般的升級。

我可以通過包含一個繼承自System.Configuration.Installer的自定義類來創建鏈接,或者在我的應用程序中創建一個選項來卸載自身,以便我可以使用以下內容重新安裝舊版本:

//using System.Diagnostics;
public static void Uninstall(string productCode, string option) {
  if (!String.IsNullOrEmpty(productCode) && !String.IsNullOrEmpty(option)) {
    string path = Environment.GetFolderPath(Environment.SpecialFolder.System);
    string param1 = string.Format("{0} {1}", path, @"\msiexec.exe");
    string param2 = string.Format("{0} {1}", option, productCode);
    ProcessStartInfo psInfo = new ProcessStartInfo(param1, param2);
    // NOTE: `option` = /i to repair or remove; /x to remove only
    try {
      Process.Start(psInfo);
      return;
    } catch (Exception) { } // the uninstall failed
  }
}

所以...

我的問題: 如何獲得我的安裝的ProductCode?

注意:我了解Microsoft建議通過Add/Remove Programs (XP)或Programs and Features (Vista / 7),但我的應用程序正在制造環境中,大多數PC已刪除這些功能(使用tweak或一些不同的工具)由我們的網絡管理員。

MSI安裝失敗,因為“已安裝此產品的另一個版本”有一個VBS片段,您可能會發現它可用作模型。

Ben在SO文章中的答案在Visual Studio安裝項目中,如何生成卸載腳本? 得到了我需要的東西。

總結一下:

“使用Visual Studio 2005/2008,您不需要編寫任何代碼來為安裝項目添加卸載選項(是的,我知道有些人可以編寫代碼來執行此操作)

  • 在安裝項目 - >文件系統窗口 - >右鍵單擊“目標機器上的文件系統” - >添加特殊文件夾,選擇系統文件夾;

  • 進入此系統文件夾添加文件。 從本地System32文件夾中瀏覽msiexec.exe並添加它。 覆蓋此文件的默認屬性,如下所示:

條件:=未安裝(確保你把'Not Installed'完全相同,相同的情況和所有內容),Permanent:= True,System:= True,Transitive:= True,Vital:= False。

  • 在“用戶程序菜單”下創建一個新快捷方式,將目標設置為您在步驟1中創建的系統文件夾,並將其指向msiexec.exe。 將快捷方式重命名為“卸載應用程序”。 將Arguments屬性設置為/ x {space} [ProductCode]。

  • 構建項目,忽略有關msiexec應被排除,不要排除它或安裝項目不會構建的事實的警告。

“未安裝”條件和Permananet:= True確保msiexec.exe僅作為安裝的一部分放入系統文件夾中,如果它不存在,並且在卸載時不會刪除它 - 因此它; s非常安全地忽略那個警告並且只是為了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM