如何检查另一个产品在MSI上安装的功能

时间:2019-09-23 12:14:00

标签: windows-installer

如果是同一产品,我们可以检查升级代码。 但是我的情况有些不同。 我有一个微星,如果安装了特定功能,则我的第二个微星应该只卸载该特定功能的第一个微星并安装其功能。 注意:只是我们有1st msi的升级代码。

请提出建议。

1 个答案:

答案 0 :(得分:0)

  

以下使用VBScript and COM。您也可以通过Win32 functions (C++)执行相同的操作。我想COM本质上是真正的Win32函数之上的包装器。


嗯,这听起来像是一个奇怪的设计,但是您可以轻松获得功能及其状态:

def decorate(fun):
   def wrapper(*args, **kw):
       res = fun(*args, **kw)
       print("function {} called with *{}, *{} returned {}".format(fun, args, kw, res)
       return res

   return wrapper



@decorate
def fun(a):
    return a * 2

功能状态:Set i = Wscript.CreateObject("WindowsInstaller.Installer") state = i.FeatureState("{PRODUCT-CODE-GUID-HERE}", "FeatureName") MsgBox state 是正常的本地安装。其余的:What does the feature state number mean?sample use)。

如果您需要从升级代码中获取产品代码:

3

请注意,许多产品可以共享相同的升级代码。


摘录以卸载功能。 Use Orca to find real feature name

Set installer = CreateObject("WindowsInstaller.Installer")
Set upgrades = installer.RelatedProducts("{UPGRADE-CODE-GUID-HERE}")

For Each u In upgrades
   MsgBox u, vbOKOnly, "Product Code: "
Next

要安装功能,值应为 Set i = Wscript.CreateObject("WindowsInstaller.Installer") config = i.ConfigureFeature ("{PRODUCT-CODE-GUID-HERE}", "FeatureName", 2) msiInstallStateLocal),以卸载 3 ({{3 }}。


链接