WiX:在 ProgramFilesFolder 中安装应用程序会引发 AccessDenied 异常。为啥?

Posted

技术标签:

【中文标题】WiX:在 ProgramFilesFolder 中安装应用程序会引发 AccessDenied 异常。为啥?【英文标题】:WiX: Installing application in ProgramFilesFolder throws AccessDenied Exception. Why?WiX:在 ProgramFilesFolder 中安装应用程序会引发 AccessDenied 异常。为什么? 【发布时间】:2011-10-05 13:21:09 【问题描述】:

我有一个 C# 应用程序和一个 WiX 项目,用于在 ProgramFilesFolder 中安装此应用程序。我的应用程序有一个使用 dll 文件的查看器元素。如果我以普通用户权限启动应用程序,我会收到错误消息,并且我的应用程序中的查看器元素不会加载错误消息,即我的查看器元素无法访问 dll 文件。作为管理员用户,它工作正常。在我的 WiX 项目中,我设置了 perMachine 属性,并且在我的应用程序中使用了其他几个 dll 文件,但我没有收到此类错误。

如果我在 ProgramFilesFolder 之外安装我的应用程序,则没有问题。 我该怎么办?在 VS2010 中,我可以为每个文件设置 Build ActionCopy to output directory,我需要设置一些特殊的东西吗?或者在 WiX 的 File 元素中是否有设置访问属性的选项?

【问题讨论】:

您是否尝试过以管理员权限运行安装程序? 【参考方案1】:

您遇到此行为是因为您的应用程序的一部分(查看器元素)需要安装文件夹中的写入权限。

解决方案是request elevation through your application manifest。这样,您的应用程序始终以管理员权限运行。

【讨论】:

我不希望应用程序以管理员权限运行。 您需要找到一种方法使查看器元素不需要这些权限。【参考方案2】:

安装或使用应用程序时是否抛出异常?

如果是后者,我唯一的猜测是有问题的 DLL 试图将某些内容写入受保护的文件夹之一,在这种情况下为 Program Files。您应该消除它以使其在没有管理员权限的情况下工作。

【讨论】:

使用应用程序时抛出异常。难道没有别的办法了吗?也许就像在 unix 系统中一样,您可以设置一个 x 位。 不,没有其他办法。正如 Cosmin 所说,您的 Viewer 组件想要写入安装目录,但不允许这样做。因此,您要么授予它在此处写入的权限(通过管理员权限),要么让它将某些内容写入普通用户可以写入的另一个目录中。它与 Unix 上的 x-bit 无关,情况也不相似。你的问题是关于 Unix 的 w-bit。

以上是关于WiX:在 ProgramFilesFolder 中安装应用程序会引发 AccessDenied 异常。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

Wix:如何设置文件夹和所有子文件夹的权限

Wix:如何设置文件夹和所有子文件夹的权限

未在 wxs 中指定 ProgramFilesFolder 的 ProgramFilesFolder 的默认安装路径

复制文件不起作用

Wix:在 Wix 之外运行命令时,运行外部 InstallShield 安装程序失败,退出代码为 -3

wix上可以修改别人的网站吗