WIX C++自定义操作
问题描述:
我有一个基本的维克斯自定义操作:WIX C++自定义操作
UINT __stdcall MyCustomAction(MSIHANDLE hInstaller)
{
DWORD dwSize=0;
MsiGetProperty(hInstaller, TEXT("MyProperty"), TEXT(""), &dwSize);
return ERROR_SUCCESS;
}
添加到安装程序:
<CustomAction Id="CustomActionId" FileKey="CustomDll" DllEntry="MyCustomAction"/>
<InstallExecuteSequence>
<Custom Action="CustomActionId" Before="InstallFinalize" />
</InstallExecuteSequence>
的问题是,无论我做什么,手柄hInstaller不有效。我已将操作设置为提交,延迟,更改了InstallExecute序列中的位置,hInstaller始终无效。
任何帮助,将不胜感激。谢谢。
答
您需要导出叫功能,因此MSI可以使用未修饰的空调风格名称
称之为本
extern "C" _declspec(dllexport) UINT __stdcall MyCustomAction(MSIHANDLE hInstall);
extern "C" UINT __stdcall MyCustomAction(MSIHANDLE hInstall)
{
DWORD dwSize=0;
MsiGetProperty(hInstaller, TEXT("MyProperty"), TEXT(""), &dwSize);
return ERROR_SUCCESS;
}
答
由于更换你的代码中提到here,克服的是混淆的唯一途径__stdcall
是使用:
#pragma comment(linker, "/EXPORT:[email protected]@@23mangledstuff#@@@@")
这产生了第二ENTR y在DLL导出表中。
+2
另一种确保非损坏函数名称的方法包含在DLL导出中,将其导出到DEF文件并将其添加到链接器属性(链接器 - >输入 - >模块定义文件)。 – Pierre 2013-06-22 10:49:32
以何种方式无效?您是否收到来自API调用的错误? – 2010-01-28 03:20:30
如果我进行任何使用该句柄的调用,该函数将返回Invalid_Handle错误消息。 – 2010-01-28 18:08:20
忽略句柄,函数本身被正确调用? – saschabeaumont 2010-02-02 04:37:06