注意:我已经在Installshield设置中附加了MergeModule(MSM)。
答案 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的答案。