使用WiX工具集为现有的ProgramData文件夹和文件设置权限

4
我接手了一个使用WIX Toolset(3.10.3)构建安装包的项目。该应用程序在c:\ProgramData\Vendor\ApplicationName中下载并存储共享数据。但是,在安装过程中不会创建此路径,而是在第一次请求路径时由应用程序本身执行。
我现在发现了一个与权限相关的问题,当多个Windows用户使用该应用程序时会出现这个问题。每当应用程序从后端下载新的数据文件时,当前Windows用户会获得这些文件的“完全控制”权限。当其他人使用另一个Windows帐户登录时,他们只能读取这些文件。这些混合权限会导致应用程序尝试将本地文件与后端同步时出现问题。
由于该应用程序不需要提升特权,因此我必须在安装过程中进行更正。作为第一步,我现在确保在安装过程中创建了c:\ProgramData\Vendor\文件夹,并使用<util:PermissionEx User="Everyone" GenericAll="yes" />正确设置了它的权限。由于这些权限是继承的,因此它将解决所有进行新安装的用户的问题。
问题在于权限仅继承自安装后创建的文件夹/文件。这意味着升级自先前版本的用户仍将剩余数据文件的混合权限。因此,我需要确保在安装过程中所有现有文件夹和文件都获得新权限。我该如何做到这一点?
1个回答

8

好的,这是我解决它的方法。希望它能帮助未来的某个人。

首先,我在MSI的wxs文件中添加了以下内容:

<Directory Id="CommonAppDataFolder">
    <Directory Id="ProgramDataVendorFolder" Name="MyVendor">
        <!--This will create the \ProgramData\MyVendor\MyProductName\ folder. -->
        <Directory Id="ProgramDataAppFolder" Name="MyProductName" />
    </Directory>
</Directory>

<DirectoryRef Id="ProgramDataAppFolder">
<Component Id="CmpCreateCommonAppDataFolderWithPermissions" Guid="13ae94b7-9ef5-4181-bfa9-933844a13418" Permanent="yes">
  <CreateFolder>
    <!--This will ensure that everyone gets full permissions to the folder that we create in the ProgramData folder. -->
    <util:PermissionEx User="Everyone" GenericAll="yes" />
  </CreateFolder>
</Component>  
</DirectoryRef> 

然后将其包含进去:

<Feature Id="ProductFeature" Title="$(var.ProductName)" Level="1">
    <!--Add folder -->
    <ComponentRef Id="CmpCreateCommonAppDataFolderWithPermissions" />
</Feature>

这三件事确保所有用户即使文件夹已存在也能完全访问ProgramData文件夹。但是,如果由于之前的权限问题已经启用了文件虚拟化,则更改权限是不够的。为了关闭文件虚拟化,我向我的可执行文件添加了一个app.manifest:
<requestedExecutionLevel  level="asInvoker" uiAccess="false" />

请记住,如果之前使用的VirtualStore包含重要文件,则这些文件不会自动出现在ProgramData文件夹中。
有关文件/注册表虚拟化的更多信息,请参阅此处:https://blogs.technet.microsoft.com/mrsnrub/2010/08/11/uac-virtualization-allowing-standard-users-to-update-a-system-protected-area/

这对我很有效。注意:您不想直接使用特殊用户组的名称,例如“已验证的用户”,因为它们在本地化版本的Windows上是不同的。相反,在wix中有特殊的硬编码字符串来表示这些特殊用户。即对于“已验证的用户”,它将是“AuthenticatedUser”。有关详细信息,请参见以下相关帖子: https://dev59.com/PEnSa4cB1Zd3GeqPP63N#1535494 https://sourceforge.net/p/wix/mailman/message/20188763/ - Matt Smith

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