【问题标题】:Cannot overwrite files in ProgramData\myApp installed by MSI无法覆盖 MSI 安装的 ProgramData\myApp 中的文件
【发布时间】:2014-03-20 12:22:28
【问题描述】:

我即将创建一个 MSI 包。 在安装过程中(例如通过双击 MSI 启动)MSI 中包含的一些文件被存放在 c:\ 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 提示!现在允许用户/我的应用程序覆盖目标文件夹中的文件:)

【问题讨论】:

  • 您在提供服务文件吗?你在安装过程中移动文件吗?这是通过自定义操作完成的吗?
  • 告诉你什么,你应该能够通过让你的应用程序(而不是安装程序)将这些文件复制到 CommonAppDataFolder 中的正确位置来解决这个问题。这将绕过所有模拟,即使对于有限的用户也应该可以正常工作 - 或者我认为。

标签: wix windows-installer programdata


【解决方案1】:

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

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

【讨论】:

  • 我对 UAC 知之甚少,但是如果这会导致管理员在运行 MSI 时冒充受限用户,那么如果您运行自定义操作会发生奇怪的事情,不是吗?当静默运行时,它是 LocalSystem 运行自定义操作,它工作正常吗?我对 UAC 知之甚少,无法理解这一点。
  • 当自定义操作从模拟的 MSI 运行时,它们以受限用户身份运行。运行提升的代码需要在没有模拟的情况下运行,并且使用本地系统帐户。一个常见的解决方案是从提升的启动程序启动 MSI,然后模拟 CA 将运行提升。无声无息。
  • 这对我来说不太有意义,我想我必须阅读 UAC。我没有安装用于测试的工具。我会问其中一位 Wix 人员,他们是否对 UAC 做了一些特别的事情。
  • 该死的。我错过了在 元素上指定 InstallPrivileges 属性。 tramontana 教程中没有提到它,我没有仔细检查 xsd 以偶然发现它。因此,在安装到 ProgramData 时,将其设置为“受限”不再显示 UAC。现在允许用户/我的应用程序覆盖目标文件夹中的文件:) 对不起,错误的轨道...
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2014-01-16
    相关资源
    最近更新 更多