从 CustomAction 中调用数据保护 API

Invoking Data Protection API from within a CustomAction

我正在尝试 运行 来自 WIX 中的 C# ca 的一些非托管代码。我有一个围绕 CryptProtectData 函数的包装器,如果来自管理员提示的 运行,则此代码可以正常工作。我已将 ca 安排为延期,希望它会在提升的会话期间 运行 但是在这种情况下它失败了。

日程安排如下:

<CustomAction Id="SetCustomActionDataValue" Property="EncryptValues" Value="foo=bar;...;" />
<CustomAction Id="EncryptValues" BinaryKey="InstallerCustomAction.CA.dll" DllEntry="EncryptValues" Execute="deferred" Impersonate="no" HideTarget="no" Return="check" />

<InstallExecuteSequence>
  <Custom Action="SetCustomActionDataValue" After="InstallFiles" />
  <Custom Action="EncryptValues" After="SetCustomActionDataValue" />
</InstallExecuteSequence>

在安装程序期间,最好是在将文件和注册表项提交给系统之后,需要做什么才能允许这样的事情运行?

你的 CA 有登录吗?你能确认你的 CustomActionData 成功了吗?

您可以尝试的一件事是将其连接为一个简单的控制台应用程序,并使用 PSExec 以 SYSTEM 身份调用 cmd.exe 提示符。

我从来没有用过这个 API 但是评论 "Typically, only a user with the same logon credential as the user who encrypted the data can decrypt the data." 让我觉得这可能 运行 不如 SYSTEM。这篇文章似乎证实了这一点。 http://www.obviex.com/samples/dpapi.aspx

FWIW,我不确定您想要实现什么,但如果可能的话,我会考虑将其从安装程序移至应用程序。安装程序通常最好保持简单和可靠。