簡體   English   中英

使用c#(DTF)中的產品代碼在MSI卸載過程中面臨的問題

[英]Issue faced during uninstall MSI using its Product Code in c#(DTF)

我正在創建一個CustomBA,它將替換現有的安裝屏蔽Bootstrapper(我真的不知道它叫什么)。

我們要安裝的MSI數量與安裝防護罩所用的數量相同,因此沒有問題。 ARP中的所有MSI條目都將被刪除,因為我們將MSI設置為Visible =“ no”。

ARP中只有“ Custom BA”(自定義BA)條目以及“ Install shield Bootstrapper”(安裝盾牌引導程序)條目都可用,兩者名稱相同。

因此,在進行了一些研究之后,我知道Windows Installer XML(WiX)將Microsoft.Deployment.WindowsInstaller互操作庫作為Deployment Tools Foundation(DTF)的一部分提供,可用於卸載MSI。

我正在使用以下代碼來卸載MSI。

Microsoft.Deployment.WindowsInstaller.Installer.SetInternalUI(InstallUIOptions.Silent);
Microsoft.Deployment.WindowsInstaller.Installer.EnableLog(InstallLogModes.Info, @"C:\Uninstall.log");
Microsoft.Deployment.WindowsInstaller.Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "");

我面臨的問題如下

  1. 首先,我必須以管理員身份運行CustomBA來卸載現有的MSI,否則它將拋出錯誤“錯誤1730。您必須是管理員才能刪除此應用程序。”。 有沒有一種方法可以在沒有管理員的情況下運行CustomBA並卸載MSI。

    1. 卸載時(當我以管理員身份運行customBA時),上面提到的代碼還刪除了帶有它的鏈包,我不希望這樣做。

    2. 運行卸載代碼后,它不會從ARP中刪除MSI條目。

我找到了這些鏈接,但我不知道它們是否相關: https: //stackoverflow.com/questions/17523974/how-to-uninstall-msi-using-its-product-code-in-c-sharp成功卸載

  1. 如果您需要成為管理員,那么您需要成為管理員。 允許受限用戶更改系統的受限區域將違反安全性。

  2. 您使用了“鏈”一詞,因此看起來InstallShield安裝程序是多MSI安裝,也許帶有隱藏的嵌入式UI。 因此,以前的MSI似乎是作為單個產品視圖安裝的,看起來它們都已全部卸載,也看起來像是單個產品視圖一樣都已卸載。 首先可能是要這樣做-使多個MSI作為一個產品出現,並且全部安裝並全部卸載。 另外,如果IS安裝是一連串的MSI,那么您肯定會全部替換它們(或升級它們),是嗎? 這就是Burn和BA也會做的。

  3. 哪個MSI的ARP條目? 從您的帖子中尚不清楚哪個MSI,假設您可能是指IS安裝的鏈式MSI之一。 並且您確定它仍然是MSI條目嗎? 可能是InstallShield在其中放置的鏈接產品的條目,而不是MSI條目。 當然,如果您的MSI卸載工作正常,則它的ARP條目將被刪除,但是可能需要刷新才能看到它確實消失了(但這是Windows問題)。 保持實心,鏈接的MSI產品(也經常刻錄)會抑制單個MSI ARP條目,而傾向於包含多個MSI的單個條目。

暫無
暫無

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

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