无法覆盖MSI安装的ProgramData \ myApp中的文件

时间:2014-03-20 12:22:28

标签: wix windows-installer programdata

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

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

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

任何人都可以告诉我为什么会这样,以及我如何获得对这些文件的写权限而不必使用/ q / i?

由于 扬

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

2 个答案:

答案 0 :(得分:1)

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

但是,常见的应用数据文件夹通常不能写入受限用户。我不确定您对UAC了解多少,但如果运行该程序的用户是管理员,则无关紧要,因为默认管理员运行的权限有限。如果应用程序需要管理员权限才能运行,则需要使用提升清单进行构建,以便提升管理员权限。或者从快捷方式以管理员身份运行它。

答案 1 :(得分:0)

Windows访问控制处理起来非常复杂。在每个版本的Windows中都有一些新的东西需要处理,并且看起来ProgramData中的默认写入访问现在包含某种特殊的ACL / DACL。如果这确实是问题,您可以在那里应用新权限并打开常规用户进行编写。请注意,我不太确切知道默认情况下哪些较新版本的Windows适用。我通常用来设置权限的工具是subinacl.exe。一个带有命令行的工具,可以吓到最有经验的系统管理员。 Some command line samples are here。您也可以在MSI中使用LockPermissions表,但不知何故,这些权限如何应用于文件系统对象存在一些问题。 subinacl.exe更复杂,功能更强。

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

关于在系统中放置不同类型文件的位置,请检查this thread