我有一个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 defenition for Customaction
<Binary Id="CustomCallId" SourceFile="CustomDllname.dll" />
<CustomAction Id="ReadValue" BinaryKey="CustomCallId" DllEntry="ReadFile"/>
<InstallExecuteSequence>
<Custom Action="ReadValue" Sequence="71" />
</InstallExecuteSequence>
但我不知道如何将参数从WIX Custom调用传递给DLL。
答案 0 :(得分:1)
Windows Installer不支持此功能。它只能使用原型UINT __stdcall CustomAction(MSIHANDLE hInstall)
从C ++ DLL调用函数。然后,该函数的实现可以使用MSIHANDLE
来访问活动安装中的属性。
如果您控制此DLL中的代码,则可以导出一个读取属性的辅助函数,然后调用原始的ReadValue
函数。或者,您可以查看其他方式来包装该调用。
答案 1 :(得分:0)
理想情况下,这种类型的自定义操作应该是数据驱动的。这是C#中的概念。它与C ++基本相同。事实上,MichaelU(InstallShield)将我的C#代码转换为C ++代码。
http://blog.deploymentengineering.com/2008/05/data-driven-cas-made-easy-with-dtf.html
您想要定义一个表格,如:
[INISearcher] INISearcher(唯一性的主键) FileName [格式化为能够使用属性的类型] 部分 键 DefaultData 属性_
您的CA可以查询此表,迭代结果,格式化FileName并执行INI读取,然后将结果存储在表中列出的属性中。