2016-08-05 90 views
0

我有一个C++自定义动作函数,如下所示。此功能用于从INi文件中检索Ini部分。WIX将参数传递给C++自定义动作

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); 

}

,我使用的维克斯defenition为Customaction低于

<Binary Id="CustomCallId" SourceFile="CustomDllname.dll" /> 
<CustomAction Id="ReadValue" BinaryKey="CustomCallId" DllEntry="ReadFile"/> 

<InstallExecuteSequence> 
    <Custom Action="ReadValue" Sequence="71" /> 
</InstallExecuteSequence> 

给出,但我不知道如何通过从维克斯自定义调用DLL的参数。

回答

1

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

如果您控制此DLL中的代码,您可以导出一个帮助函数,该函数读取属性,然后调用原始的ReadValue函数。或者,您可以查看其他方式来打包该电话。

+0

InstallShield虽然有一个很好的模式。 (标准DLL)。 –

0

这种类型的自定义操作理想情况下应该是数据驱动的。这是C#中的概念。它对于C++基本上是一样的。事实上,MichaelU(InstallShield)已经足够将我的C#代码翻译成C++代码。

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

你想要定义像表:

[INISearcher] INISearcher(为唯一主键) 文件名[类型格式,以便能够使用属性] 科 关键 DefaultData Property_

您的CA可能会查询此表,迭代的结果,格式化文件名和执行INI读取,则s将结果撕在表中列出的财产中。

相关问题