【问题标题】:Getting List Of Installed Products c#获取已安装产品的列表 c#
【发布时间】:2013-06-24 11:12:16
【问题描述】:

为了安装/卸载/更新我们的软件,我们的自定义安装程序使用WindowsInstaller.Installer.Products 从 Windows 注册表中获取已安装产品的列表。

在某些客户端计算机上,未知软件可能正在向注册表“HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products”添加一个新条目,该条目的名称类似于“ABCD”。这导致WindowsInstaller.Installer.Products 抛出异常。我可以通过手动将注册表项添加到名为“test”的“HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products”中来重新创建此方案。如果我将 test 重命名为新的 GUID,那么模拟的问题就会得到解决。

您能否提出任何可能的解决方法/解决方案?

使用 MSIINV.exe 工具会很困难,因为它是第 3 方工具,但这似乎有帮助。

【问题讨论】:

  • 查看 WiX DTF 中的 MSI 互操作库(如下)。这比尝试将 COM 互操作与 WindowsInstaller.Installer 一起使用更容易、更简洁。

标签: c# .net installation registry windows-installer


【解决方案1】:

我会看一下 Windows Installer XML (WiX) 部署工具基础 (DTF) 中的 Microsoft.Deployment.WindowsInstaller 命名空间。它有:

public static IEnumerable<ProductInstallation> GetProducts(
    string productCode,
    string userSid,
    UserContexts context
)

产品代码(字符串)

产品实例的产品代码 (GUID) 列举的。只有上下文范围内的产品实例 将枚举由 userSid 和 context 参数指定的参数。 此参数可以设置为 null 以枚举产品中的所有产品 指定的上下文。

userSid(字符串)

指定一个安全标识符 (SID) 限制枚举的上下文。 SID 值 其他 比 s-1-1-0 被视为用户 SID 并将枚举限制为 当前用户或系统中的任何用户。特殊 SID 字符串 s-1-1-0 (Everyone) 指定系统中所有用户的枚举。这 可以将参数设置为 null 以将枚举范围限制为 当前用户。当上下文仅设置为机器上下文时,userSid 必须为空。

上下文(UserContexts)

指定用户上下文。

包装了 Win32 MSI API MsiEnumProductsEx 函数。这会带回一个 ProductInstallation 集合,您可以对其进行 Linq 查询,以找出您需要了解的有关已安装 MSI 的任何信息。

【讨论】:

  • 感谢您的回复。我看到 WIX DTF 现在是一个开源项目,虽然是由微软发起的。微软提供的程序集我无能为力吗?我不是一个开源的仇恨者,但很难把这样的东西放在这里!
  • 作为替代方案,我正在尝试使用 ProductEx 属性,如下所示...Interop.WindowsInstaller.Installer.ProductEx["","",7]。但我无法理解如何使用返回的 RecordList。尽管有上面提到的“坏”注册表值,这仍然有效。你能告诉我如何在 c# 应用程序中使用返回的 RecordList。
  • Windows Installer 来自 Windows 平台,仅支持 Win32 和 COM。通过 Win32_Product 类也支持 WMI,但坦率地说,WMI 支持被严重破坏,并且 COM 支持在我上次检查时生成互操作时出现问题。 .NET Framework 基类库中不支持 MSI。
  • 抱歉,我不会使用我知道不是最佳的方法为您提供帮助。如果我自己不做,我就不会教别人做。
  • 为其他人节省一些工作,这是Microsoft.Deployment.WindowsInstaller.ProductInstallation的静态方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多