可视化WIX将参数传递给C++自定义操作

visual WIX passing parameter to C++ custom action

本文关键字:C++ 自定义 操作 参数传递 WIX 可视化      更新时间:2023-10-16

我有一个c++自定义操作函数,如下所示。此函数用于从Ini文件中检索Ini部分。

extern "C" LPSTR PASCAL EXPORT ReadFile(LPSTR IniFilename, LPSTR IniFIleSection, LPSTR IniKey, LPSTR DefaultValue)
{
    static char MyValue[512];
    sprintf(sValue, "%s %s %s %s",IniFilename, IniFIleSection, IniKey, DefaultValue);
    GetPrivateProfileString(IniFIleSection, IniKey, DefaultValue, MyValue, 512,IniFilename);
    return (sValue);

}

我正在使用Wix防御自定义,如下所示

 <Binary Id="CustomCallId" SourceFile="CustomDllname.dll"  />
 <CustomAction Id="ReadValue" BinaryKey="CustomCallId" DllEntry="ReadFile"/>
 <InstallExecuteSequence>
  <Custom Action="ReadValue" Sequence="71" />
</InstallExecuteSequence>

但我不知道如何将参数从WIXCustom调用传递到DLL。

Windows安装程序不支持此功能。它只能调用带有原型UINT __stdcall CustomAction(MSIHANDLE hInstall)的C++DLL中的函数。然后,该功能的实现可以使用MSIHANDLE访问活动安装中的属性。

如果控制此DLL中的代码,则可以导出一个助手函数,该函数读取属性,然后调用原始的ReadValue函数。或者,您可以研究其他方式来包装该调用。

这种类型的自定义操作最好是数据驱动的。这是C#中的概念。C++基本上是一样的。事实上,MichaelU(InstallShield(非常友好地将我的C#代码翻译成了C++代码。

http://blog.deploymentengineering.com/2008/05/data-driven-cas-made-easy-with-dtf.html

您可能想要定义一个表,如:

[INISearcher]INISearcher(唯一性主键(FileName[格式化为能够使用属性的类型]部分钥匙默认数据财产_

您的CA可以查询此表,迭代结果,格式化FileName并执行INI读取,然后将结果存储在表中列出的属性中。