我尝试从c ++ dll中的CustomActionData属性获取数据,但是在延迟序列中它始终为空。如果我在UI序列中执行的CA中使用完全相同的代码,那么一切都很好。

        UINT iCASize = 0;
        UINT uiStat = MsiGetProperty(hInstall, TEXT("CustomActionData"), TEXT(""), &iCASize);
        if (uiStat == ERROR_MORE_DATA)
        {
            // this means there are data to read. Allocate array for all data and read it (+1 for null termination)
            pCustData = new WCHAR[iCASize + 1];
            uiStat = MsiGetProperty(hInstall, TEXT("CustomActionData"), pCustData, &iCASize);
        }


你们当中有人知道什么地方可能出问题了吗?

最佳答案

此C ++代码有问题(我已经二十年没有使用c ++了),或者更有可能您没有正确设置CustomActionData。

您需要在延迟的自定义操作之前在立即上下文中安排一个自定义操作。它设置的属性是延迟CA的名称。

Customaction名称:SetSomething属性:Something =值:FOO(不是CustomActionData = FOO)

Customaction名称:Something MsiGetProperty(...“ CustomactionData” ...);

09-06 14:09