2015-04-15 71 views
1

我無法使用ConfigureProduct進行卸載,無聲地運行。我有以下幾點:使用Microsoft.Deployment.WindowsInstaller.Installer.ConfigureProduct以靜默方式卸載?

using Microsoft.Deployment.WindowsInstaller; 

Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "/q"); 

根據一些早期的帖子「/ Q」應該工作,除了每次我運行代碼時出現以下情況例外。

"Invalid command line argument. Consult the Windows Installer SDK for detailed command line help." 

注意,「/ Q」使用msiexec.exe的,但我想做到這一點使用Microsoft.Deployment.WindowsInstaller時不工作。

我也曾嘗試UI設置爲靜音下列要求:

Installer.SetInternalUI(InstallUIOptions.Silent); 
Installer.ConfigureProduct(productCode, 0, InstallState.Absent, ""); 

但後來我得到以下異常:

"Fatal error during installation." 

從消息據我瞭解,SetInternalUI是安裝,而不是的卸載但不確定。

我正在使用版本爲2.0.50727的WiX 3.9 R2安裝中的DLL。

任何幫助表示讚賞。謝謝!

編輯:我在「ConfigureProduct」方法中對「commandLine」參數的註釋看起來更接近一些。

// commandLine: 
    //  Specifies the command line property settings. This should be a list of the 
    //  format Property=Setting Property=Setting. 

所以基本上沒有,你不能傳遞「/ Q」,「/ L」,或其他任何不在表「屬性=設置」。答案中鏈接的參考文章中的例子似乎是錯誤的。 (或其它版本之間的改變,但我對此表示懷疑。)

回答

1

如果它正常卸載沒有任何錯誤,那麼最可能的問題是卸載需要提升並且代碼沒有運行提升,因此失敗。在靜音卸載期間它不會要求用戶提升!

SetInternalUI適用於卸載。例如,下面的C++代碼段不正是你想要的東西,使得卸載完全沉默:

INSTALLUILEVEL il = MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); 
UINT n = MsiConfigureProductEx(productid, INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT, L"REBOOT=R"); 

和ConfigureProduct呼叫使用相同的API。

+0

是的,這就是我得到致命錯誤的原因。我從一個提升的命令提示符啓動了程序,它工作。有沒有簡單的方法使用Microsoft.Deployment.WindowsInstaller API以提升模式運行ConfigureProduct? – user2958211

1

嘗試不同的方法來卸載MSI文件此引用(選項6描述DTF):

不幸的是我沒有的Visual Studio可在瞬間與測試 - 我還是會搏一搏,雖然我不能測試任何東西。不用說,這使得回答困難:

  • 您的無聲卸載程序可能會崩潰,這就是爲什麼它在無聲模式下失敗。
  • 通常情況下,這將涉及自定義操作,該操作可能無法正常調節並且運行不正確(或者完全不在靜音模式下運行)。

嘗試在無提示卸載期間啓用日誌記錄,如此處所示(適當調整日誌文件的路徑)。特別的標誌刷新日誌文件 - 這意味着它是分批所以沒有記錄因輸給任何潛在的崩潰(這減慢了(UN)的安裝大大過程)連續而不是寫:

using Microsoft.Deployment.WindowsInstaller; 

public static void Uninstall(string productCode) 
{ 
    Installer.SetInternalUI(InstallUIOptions.Silent); 
    Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=\"R\" /L*V! c:\uninstall.log"); 
} 

要找到日誌文件中的相關信息,請查看此log file checking tip from Rob Mensching(Wix的創建者)。

+0

哇,你花了多長時間寫下來?而且你必須真正挖掘出WAY才能找到一個我仍在使用VBScript的時代。 :) –

+0

似乎10年。看起來可憐的普尼特不知道「富」是什麼意思。 https://community.flexerasoftware.com/showthread.php?153737-How-to-uninstall-a-product-without-using-msiexec-exe –

+0

這是編輯和擴展數十次的那些「演變主題」之一。而且VBScript也足夠好用了。世界上最糟糕的錯誤處理並不好,但簡單而有效。 –

相關問題