【问题标题】:GetDirectories call in msi CustomAction throws security exception ONLY when All Users仅当所有用户时,msi CustomAction 中的 GetDirectories 调用才会引发安全异常
【发布时间】:2023-03-27 20:58:01
【问题描述】:

我有一个自定义操作,用于部署一些文件,这些文件位于 handoff 包中的 msi 旁边。我的自定义操作通过 OriginalDatabase 参数传递到 msi 路径,我正在检查它旁边是否有文件夹。没有什么太疯狂了,但很难弄清楚。

从本地复制的文件安装单个或多个用户就像一个冠军。从网络共享运行 setup.exe 时安装单个用户可以正常工作,但是当我从网络共享安装所有用户时,我遇到了安全异常。

有问题的行是这样的:

DirectoryInfo[] subdirectories = workingDirectoryInfo.GetDirectories("Foo");

自定义操作使用SecurityAction.Demand 运行,因此我应该拥有所需的所有访问权限。

非常感谢任何人提供的任何意见。

谢谢, 凯西

【问题讨论】:

  • 能否提供完整的异常详细信息(包括完整的堆栈跟踪),由其 ToString() 方法返回?

标签: windows-installer code-access-security custom-action


【解决方案1】:

我相信,当您为每个用户安装时,服务器端不需要提升来执行事务,因此它会模拟交互式用户并可以访问文件。当您为所有用户安装时,它必须提升,所以现在它基本上作为系统运行,该系统将使用机器帐户访问文件,然后您会收到权限错误。

请问为什么这些文件不在您的安装程序中?是否有某种方法可以包含它们,这样您就不必进行自定义操作?否则,您可能必须编写一个自定义操作来检测 OriginalDatabase 在网络共享上并阻止安装,除非用户在运行之前将所有文件都复制下来。

【讨论】:

  • 您好克里斯托弗,感谢您的回复。这确实是与作为系统运行相关的权限问题。 msi 之外的文件可能会在每次部署时发生变化,因此使用自定义操作是为了避免需要为不同的部署执行自定义 msi。如果从网络运行所有用户,感谢您的回复和禁用副本的建议。我认为这是一件好事,可能我们最终会这样做。
猜你喜欢
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多