在延迟的自定义操作中获取 CustomActionData

Getting CustomActionData in deferred custom action

我尝试从 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++ 代码有问题(我已经 20 年没用过 C++ 了),要么更可能是你没有正确设置 CustomActionData。

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

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

自定义操作名称:MsiGet属性( ... "CustomactionData" ... );