MSI安装程序文件/文件夹权限

10

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

文件已经在适当的文件夹中创建好了,一切都很顺利,唯独文件权限有问题。据我所知,文件应该继承父文件夹的权限(如果启用了该选项),但在这种情况下并没有发生这种情况。我创建的文件应该对常规用户可写,并且我不想为每个文件显式设置权限。问题可能是安装程序以不同的权限运行,因此文件无法从其父文件夹继承权限吗?

感谢您提前的帮助。


我觉得这很奇怪。你安装后检查了权限吗?比如说它们不仅仅是只读的吧? - H H
是的。问题在于安装程序期间创建的文件夹会获得管理员(或类似角色)的默认权限。我手动设置了文件夹权限,使普通用户可以写入。但是在文件夹中创建的文件不会继承手动设置的文件夹权限(当然,该文件是在安装程序中创建的,该程序可能以管理员身份运行)。也许解决方案是手动调整文件权限,但我认为这不是一个好方法。 - Kenneth
4个回答

3
安装程序使用管理员权限运行,这将允许其更改程序文件中的任何内容。普通用户只能读取程序文件夹和ProgramData/Common Application Data文件夹。
MSI的锁定权限表允许设置程序在创建ProgramData/Common Application Data文件夹后更改文件夹权限。Visual Studio的设置项目不支持MSI的锁定权限表,因此,如果您需要在设置项目中创建的文件夹对普通用户可写,则需要在自定义操作中使用SetNamedSecurityInfo授予权限或在构建后修改MSI数据库。您还可以找到一个可以处理MSI的锁定权限表的MSI编写软件。

这是关于ProgramData文件夹(Vista)的内容,普通用户应该具有读写访问权限。 - H H
在普通用户的情况下,Common ProgramData是只读的。如果要对所有用户授予R/W权限,则安装程序必须在创建子文件夹后更改权限。 - Sheng Jiang 蒋晟

2

我曾经遇到过类似的问题,通过这个示例的帮助,我成功地解决了它。


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

1

我这里也遇到了类似的问题。问题在于msi使用用户SYSTEM创建文件,而应用程序在运行时使用已登录的用户(该用户没有对该文件的写入权限)。 我的解决方法是,在应用程序初始化期间创建一个新文件(如果不存在),并将其与安装程序创建的文件进行比较。然后,此文件将具有写入权限。虽然这不是一种好的做法,但解决了我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接