1

我即将创建一个 MSI 包。在安装过程中(例如通过双击 MSI 启动),包含在 MSI 中的一些文件更深地存放在 c:\ProgramData(分别是 CommonAppDataFolder)下,例如 c:\ProgramData\myCompany\myApplication。稍后当用户运行已安装的应用程序时,应用程序可能需要修改这些文件。问题是正在运行的应用程序和用户(例如通过 Windows 资源管理器)都无权修改安装期间创建的 c:\ProgramData\myCompany\myApplication 下的任何文件。这些文件没有只读属性集。

现在对我来说奇怪的是:如果我通过 msiexec /q /i 安装 MSI,那么我对这些文件具有写权限。

我的 MSI 是用 WiX 创建的,我的操作系统是 Win 7,用户是管理员组的成员。

谁能告诉我为什么会这样,以及我如何获得对这些文件的写权限而无需使用 /q /i?

谢谢简

编辑 2014-03-24:该死的。我错过了在我的元素上指定 InstallPrivileges 属性,我只是不知道。将其设置为“受限”不会在安装到 ProgramData 时显示 UAC 提示!现在允许用户/我的应用程序覆盖目标文件夹中的文件:)

4

2 回答 2

1

我不知道为什么对于访问该文件夹的行为会有所不同,除非您有一个自定义操作来执行仅在 UI 序列中执行的操作。这是我能想到的唯一功能差异 - UI 序列在静默安装中被抑制。

但是,公共应用程序数据文件夹通常不可写入受限用户。我不确定您对 UAC 了解多少,但运行该程序的用户是否是管理员并不重要,因为默认情况下管理员以有限的权限运行。如果应用程序需要管理员权限才能运行,那么它需要使用提升清单进行构建,因此它要求提升到管理员权限。或者从快捷方式以管理员身份运行它。

于 2014-03-20T15:32:52.527 回答
0

Windows 访问控制处理起来极其复杂。在每个版本的 Windows 中,都有一些新的和改变的东西需要处理,看起来 ProgramData 中的默认写访问现在包括某种特殊的ACL / DACL。如果这确实是问题,您可以在那里应用新权限并开放给普通用户编写。请注意,我不太清楚究竟哪些较新版本的 Windows 作为默认应用。我通常用来设置权限的工具是subinacl.exe。真正的少数带有命令行的工具,可以吓到最有经验的系统管理员。一些命令行示例在这里. 您也可以在 MSI 中使用 LockPermissions 表,但不知何故,这些权限如何应用于文件系统对象存在一些问题。subinacl.exe 更复杂,功能更强大。

有关文件和文件夹权限的更多信息:

关于您应该在系统上放置不同类型文件的位置,请查看此线程

于 2014-03-20T21:52:34.360 回答