1

我有一个包含 2 个不同 .cpp 的项目。MyProj 由 MyCPP1 和 MyCPP2 组成 MyCPP1 包含要从 msi 使用 wix 执行的不同功能。

extern "C" __declspec(dllexport) UINT __stdcall MyCAFunction(MSIHANDLE hInstall)
{
    TCHAR name[MAX_PATH] = {0};
    DWORD nameLen = MAX_PATH;
    TCHAR keydir[MAX_PATH] = {0};
    DWORD keydirLen = MAX_PATH;

    MsiGetProperty (hInstall, L"Val1", name, &nameLen);
    MsiGetProperty (hInstall, L"Val2", keydir, &keydirLen);
}

wix代码是:

<CustomAction Id="MyCA.Props" Return="check" Property="MyCA" value="Val1=[LogonUser];Val2=[INSTALLDIR]"/>
<CustomAction Id="MyCA" Return="check" Execute="deferred" BinaryKey="Binary1" DllEntry="_MyCAFunction@4" HideTarget="no" />
<Binary Id="Binary1" SourceFile="$(var.ConfDir)MyProj.dll" />

嗯......所以我有一个错误:

错误 1723:无法运行完成此安装所需的 DLL。

我需要怎么挖?

我对 CA 类型有一些想法……例如带有 FileKey 引用的 CA 的基本类型是 17。但我的 CA 类型是 1041(Orca 有帮助)。会不会是我的问题?

我已经检查了具有不同类型 CA 的版本。它只是因为 CA 的参数(只是删除 Execute="deferred" 将类型从 1041 更改为 17(标准类型)。解决这个问题的最后一件事是 dll。我今天会看到它......有什么问题吗?

尝试了不同的构建dll的方法。仅适用于由 C++ Wix 自定义操作项目的示例项目构建的 dll。我比较了 3 或 4 个不同的项目。通过道具、链接、外部依赖...找不到问题...帮帮我...

4

1 回答 1

1

检查从 DLL 导出的函数的名称。

为此,请在带有标志dumpbin的 DLL 上运行实用程序。/exports

于 2012-05-18T06:46:29.247 回答