【问题标题】:MSI Installer file/folder permissionsMSI 安装程序文件/文件夹权限
【发布时间】:2010-12-10 01:53:27
【问题描述】:

我正在尝试使用基本的 MSI 安装程序在 programdata 文件夹中安装一组文件。由于文件的内容是动态的并在安装过程中生成,因此我在安装过程中使用 C# 代码创建文件。

文件在适当的文件夹中创建,一切都很好,除了文件权限。据我了解,文件应该从父文件夹继承其权限(如果启用),但在这种情况下,这不会发生。我创建的文件应该对普通用户是可写的,我不想为每个创建的文件明确设置权限。问题可能是安装程序以不同的权限运行,因此文件没有从其父文件夹继承权限吗?

提前感谢您的帮助。

【问题讨论】:

  • 我觉得这很奇怪。安装后检查权限了吗?即它们不只是只读的?
  • 是的。问题是在安装过程中创建的文件夹获得了管理员的默认权限(或类似的权限)。我手动设置了文件夹权限,让普通用户可以写。但是在文件夹中创建的文件不会继承在文件夹上手动设置的权限(当然,文件是在安装程序中创建的,可能以管理员身份运行)。也许解决方案是手动调整文件的权限,但是,我认为这不是一个好方法。

标签: c# file installation permissions windows-installer


【解决方案1】:

我在这里遇到过类似的问题。这里的问题是 msi 正在使用用户 SYSTEM 创建文件。并且应用程序在运行时使用的是登录用户(没有对该文件的写权限)。 我所做的是在应用程序初始化期间使用安装程序创建的文件创建一个新文件(如果不存在)。然后这个文件将具有写权限。这不是一个好习惯,但解决了我的问题。

【讨论】:

    【解决方案2】:

    安装程序以管理员权限运行,这将允许它更改程序文件中的任何内容。普通用户对程序文件文件夹和 ProgramData/Common Application Data 文件夹具有只读访问权限。

    MSI 的lock permission table 允许安装程序在 ProgramData/Common Application Data 中创建文件夹后更改其权限。 Visual Studio 的安装项目不支持 MSI 的锁定权限表,因此如果您需要创建的文件夹对安装项目中的普通用户可写,您需要使用 SetNamedSecurityInfo 在自定义操作中授予权限或修改 MSI 数据库作为帖子构建步骤。你也可以找一个可以处理微星锁权限表的微星创作软件。

    【讨论】:

    • 关于 ProgramData 文件夹(Vista),普通用户应该有读/写权限。
    • Common ProgramData 对普通用户只读,要授予所有用户 R/W 权限,安装程序必须在创建子文件夹后更改权限。
    【解决方案3】:

    我遇到了非常相似的问题,我可以使用示例 here 解决它。

    【讨论】:

      【解决方案4】:

      如果您使用自定义操作手动设置文件夹权限并使用另一个自定义操作生成和安装文件,则问题可能是由执行顺序引起的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-29
        • 2015-09-24
        • 1970-01-01
        相关资源
        最近更新 更多