C#代码卸载installshield安装程序

时间:2018-10-07 14:29:33

标签: windows-installer installshield

  1. 我已经使用Installshield进行了设置。 (Setup.exe)。
  2. 我希望C#代码使用Installshield安装程序产品代码来卸载该exe。
  3. 而且,我必须知道为什么在尝试手动卸载时exe无法卸载。它会触发回滚。
  4. 我的日志文件看起来像这样。有什么问题吗?

LogFile

注意:我已经在Installshield设置中附加了MergeModule(MSM)。

1 个答案:

答案 0 :(得分:0)

日志记录和调试 :如果在卸载过程中安装程序回滚,请检查MSI日志文件。您似乎有一个日志文件,因此请在其中搜索 "Value 3" This trick on MSI logging and debugging is explained in this answer

共享的组件 :组件可以由已安装的多个产品共享。除非只有一个产品注册为“客户端”,否则在卸载期间将不会删除这些组件。您可以使用此VBScript确定哪些产品共享该组件。建议您将其保存到文本文件并从桌面运行。从问题中显示的日志文件中输入组件GUID:

Dim installer : Set installer = CreateObject("WindowsInstaller.Installer")
Dim counter : counter = 1

' Get component GUID from user
componentguid = Trim(InputBox("Please specify component GUID to look up (sample provided, please replace):", "Component GUID:","{4AC30CE3-6D22-5D84-972C-81C5A4775C3D}"))
If componentguid = vbCancel Or Trim(componentguid) = "" Then
   WScript.Quit(0) ' User aborted
End If

' Get list of products that share the component specified (if any)
Set componentclients = installer.ComponentClients(componentguid)
If (Err.number <> 0) Then
   MsgBox "Invalid component GUID?", vbOKOnly, "An error occurred:"
   WScript.Quit(2) ' Critical error, abort
End If

' Show the products
For Each productcode in componentclients
   productname = installer.productinfo (productcode, "InstalledProductName")
   productlist = productlist & counter & " - Product Code: " & productcode & vbNewLine & "Product Name: " & productname & vbNewLine & vbNewLine
   counter = counter + 1
Next

message = "The below products share component GUID: " & componentguid & vbNewLine & vbNewLine

MsgBox message & productlist, vbOKOnly, "Products sharing the component GUID: "

DumpComponentList.zip :Windows Installer专家 Phil Wilson 还有另一个VBScript,它将所有Windows Installer组件都转储到文本文件中。上面的脚本改编自该脚本,您可以在这里找到DumpComponentList.zip

DTF :对于.NET,Windows Installer Win32 / COM API(Microsoft.Deployment.WindowsInstaller.dll-this file is installed with WiX)有DTF包装器。这是Tom Blodget using LINQ to access Windows Installer information的答案。