Windows installer msi CustomAction中的GetDirectory调用仅当所有用户

Windows installer msi CustomAction中的GetDirectory调用仅当所有用户,windows-installer,code-access-security,custom-action,Windows Installer,Code Access Security,Custom Action,我有一个自定义操作,用于部署位于切换包中msi旁边的一些文件。我的自定义操作通过OriginalDatabase参数传递给msi路径,我正在检查它旁边是否有文件夹。没有什么太疯狂的事,但这是一件让人头疼的事 从本地复制的文件中安装单个或多个用户的工作方式与champ类似。从网络共享运行setup.exe时安装单个用户可以正常工作,但是当我从网络共享安装所有用户时,会出现安全异常 问题是: DirectoryInfo[] subdirectories = workingDirectoryInfo.

我有一个自定义操作,用于部署位于切换包中msi旁边的一些文件。我的自定义操作通过OriginalDatabase参数传递给msi路径,我正在检查它旁边是否有文件夹。没有什么太疯狂的事,但这是一件让人头疼的事

从本地复制的文件中安装单个或多个用户的工作方式与champ类似。从网络共享运行setup.exe时安装单个用户可以正常工作,但是当我从网络共享安装所有用户时,会出现安全异常

问题是:

DirectoryInfo[] subdirectories = workingDirectoryInfo.GetDirectories("Foo");
自定义操作与SecurityAction.Demand一起运行,因此我应该拥有所需的所有访问权限

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

谢谢,
Casey

我相信,当您按用户安装时,服务器端不需要升级来执行事务,这样它就可以模拟交互用户并访问文件。当您为所有用户安装时,它必须升级,所以现在它基本上是作为系统运行的,它将使用机器帐户访问文件,并提示您出现权限错误


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

您能否提供ToString()方法返回的完整异常详细信息(包括完整的堆栈跟踪)?您好,Christopher,谢谢你的回复。这确实是一个与作为系统运行相关的权限问题。msi之外的文件可能会随部署而更改,因此使用自定义操作是为了避免需要为不同的部署执行自定义msi。感谢您的回复和建议,如果从网络运行所有用户,请禁用副本。我认为这是一个很好的例子,也许我们最终会做些什么。