繁体   English   中英

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

[英]WIX passing parameter to C++ custom action

我有一个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>

但是我不确定如何将WIX自定义调用中的参数传递给DLL。

Windows Installer不支持此功能。 它只能使用原型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 [格式化为可以使用属性的类型]节键DefaultData Property_

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM