【问题标题】:Invoking Data Protection API from within a CustomAction从 CustomAction 中调用数据保护 API
【发布时间】:2015-11-20 20:57:45
【问题描述】:

我正在尝试从 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>

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

【问题讨论】:

  • 检查 ORCA 中的执行顺序,并在 InstallFinlize 之前的最后一个自定义操作之后运行您的 CA。 InstallFinilize 是最后一个以延迟方式运行的 customAction。
  • 这似乎没有帮助。显然,Windows 安装程序环境在立即和延迟阶段都有一些东西会阻止 DPAPI 代码运行。当从普通控制台应用程序调用时,相同的代码运行良好。

标签: wix custom-action wix3.5


【解决方案1】:

您的 CA 中是否有任何登录信息?你能确认你的 CustomActionData 已经完成了吗?

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

我从未使用过此 API,但评论“通常,只有与加密数据的用户具有相同登录凭据的用户才能解密数据。”让我认为这可能无法像 SYSTEM 一样运行良好。这篇文章似乎证实了这一点。 http://www.obviex.com/samples/dpapi.aspx

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

【讨论】:

  • 是的,我有日志记录。 CA 使用类似于Impersonation code in C# 的代码进入备用用户的上下文,我登录新用户,然后尝试利用 DPAPI 代码。使用进程监视器,我看不到一个明显的问题,加密根本失败。我可以将这部分移出,但是安装程序有对话框可以查询所有必需的运行时配置(它是一项服务),而省略这一步将不太理想。
  • 许多 Windows Installer 专家认为配置数据应该被排除在安装程序之外并在首次运行时进行处理。对于服务,您可以在静止模式下启动服务,然后在初始化配置数据后开始处理工作流。
猜你喜欢
  • 2012-11-16
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 2012-05-06
  • 2020-02-19
  • 2021-05-10
相关资源
最近更新 更多