可视化WIX将参数传递给C++自定义操作
visual 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>
但我不知道如何将参数从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读取,然后将结果存储在表中列出的属性中。
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 使用VS Code和CMake Tools运行自定义命令
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- std::ranges::elements_view,用于自定义类似元组的数据
- 跟随整数索引列表的自定义类迭代器
- 参数化自定义CMake工具链
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 如何在自定义类中启用'auto loops'?
- 使用QJsEngine在Qt中注册自定义类型
- Qt自定义QPush按钮未显示在布局上
- 自定义对象的dlib序列化在gcc中失败
- 自定义创建QFuture
- 如何在QT中的自定义视频小工具t上绘制矩形