【问题标题】:How to get "INSTALLED" property in Custom Action DLL (MSI/Wix)?如何在自定义操作 DLL (MSI/Wix) 中获取“INSTALLED”属性?
【发布时间】:2017-05-05 07:35:28
【问题描述】:

在我的自定义 DLL 中,我需要检查是否正在安装或卸载产品,因此需要获取 "INSTALLED" 属性的值(就像在 WiX 脚本中一样)。这是我在 C++ DLL 中所做的:

WCHAR propValue[MAX_PATH];
DWORD propValLen = MAX_PATH;
// MSIHANDLE msiHandle; 
MsiGetProperty(msiHandle, L"INSTALLED", propValue, &propValLen);
propValue[propValLen] = 0;

但结果总是一个空字符串(对于安装和卸载)!如何检查产品是否正在安装或卸载?

【问题讨论】:

标签: c++ visual-c++ dll wix windows-installer


【解决方案1】:

【讨论】:

  • 我已验证。对于自定义 DLL,它区分大小写。对于 MSI/Wix,它不是。是否可以使用 MSI 函数进行不区分大小写的查找?
  • @Ajay AFAIK 没有不区分大小写的查询。只需在任何地方编写代码并解决正确的案例和问题。
  • 其实你的答案是不正确的。 MSI 属性不区分大小写。这只是执行上下文。所有属性在“立即”自定义操作处理程序中都是可见的,但在“延迟”处理程序中没有任何属性可见。我刚刚注意到 DLL 本身被多次加载/卸载,因此无法将属性值存储在全局变量中!
  • @Ajay,我使用 MSI 已有 18 年了。 MSI 属性肯定是区分大小写的。分为三类。私人、公共和安全。 Private 包含小写字母,Public 仅包含大写字母,Secure 是也列在 SecureCustomPublicProperties 属性中的公共属性。在 MSI 和任何创建 MSI 的工具中不存在不区分大小写的属性。
猜你喜欢
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
相关资源
最近更新 更多