无法覆盖MSI安装的ProgramDatamyApp中的文件



我即将创建一个MSI包。在安装过程中(例如通过双击MSI启动),MSI中包含的一些文件存放在c:ProgramData (resp.)下。commonappdata文件夹),例如:c:ProgramDatamyCompanymyApplication。稍后,当用户运行安装的应用程序时,应用程序可能需要修改这些文件。问题是,无论是运行的应用程序还是用户(例如通过Windows资源管理器)都无权修改安装过程中创建的c:ProgramDatamyCompanymyApplication下的任何文件。文件没有只读属性集。

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

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

有谁能告诉我为什么会这样,以及我如何获得这些文件的写权限而不必使用/q/I ?

谢谢1月

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

我不知道为什么对于访问那个文件夹,这种行为会有所不同,除非你有一个自定义的动作,只在UI序列中做一些事情。这是我能想到的唯一的功能区别——在静默安装中,UI序列被抑制了。

然而,普通的应用程序数据文件夹通常不能被有限的用户写入。我不确定您对UAC了解多少,但是运行该程序的用户是否是管理员并不重要,因为默认情况下,管理员以有限的权限运行。如果应用程序需要管理员权限才能运行,那么它需要构建一个提升清单,以便它要求提升到管理员权限。要么这样做,要么从快捷方式以管理员身份运行它。

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

更多关于文件和文件夹权限:

  • http://technet.microsoft.com/en-us/library/bb727008.aspx
  • http://support.microsoft.com/kb/308419

关于你应该把不同类型的文件放在系统的哪里,请查看这个线程。

相关内容

  • 没有找到相关文章

最新更新