我正在尝试从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>
需要做些什么才能在安装程序期间运行这样的东西,最好是在将文件和注册表项提交给系统之后?
答案 0 :(得分:0)
您的CA中是否有任何日志记录?你能确认你的CustomActionData完成了吗?
您可能尝试的一件事是将其连接为一个简单的控制台应用程序,并使用PSExec以SYSTEM身份调用cmd.exe提示符。
我从未使用此API,但注释“通常,只有具有与加密数据的用户相同的登录凭据的用户才能解密数据。”让我觉得这可能不如SYSTEM那样好。这篇文章似乎证实了这一点。 http://www.obviex.com/samples/dpapi.aspx
FWIW,我不确定您要实现的目标,但我会考虑将其从安装程序移至应用程序(如果可能)。安装人员通常最好保持简单可靠。