如何更改已使用 wix 安装程序创建的文件的权限

How to change the permissions of the file that is already created using wix installer

我的要求是,在安装较旧的安装程序包时,会在 ProgramData 文件夹中使用系统权限创建文件 (Config.txt)。 从代码中,我们无法在没有管理员权限的情况下删除该文件。 出于这个原因,在安装较新的安装程序时,我想更改文件的权限,以便从代码中删除该文件。

我是 Wix 安装程序的新手,我正在尝试如下所示。但它不起作用。

下面是代码片段:

<Property Id="PROGRAMDATA" Value="C:\ProgramData\TestApp\Config"/>
<Property Id="APP_SEARCH">
            <DirectorySearch Id="APP_DIR" value="[PROGRAMDATA]" Depth="0">
                <FileSearch Id="FILE_SEARCH" Name="Config.txt" />
            </DirectorySearch>
</Property>

<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="CommonAppDataFolder" ShortSourceName="Common~1" SourceName="CommonAppData">
<Directory Id="NEWINSTALLDIR">   
<Directory Id="APPCORE" Name="APPCore">
    <Component Id="APP" Guid="{681F6F86-00D7-41A3-8DBB-44AFE9880941}" KeyPath="yes">
                                
        <File Id="FILE_SEARCH" Name="Config.txt" Value="[PROGRAMDATA]" KeyPath="no">
            <Permission GenericAll="yes" User="Everyone" Delete="yes"/>
        </File>
        <RemoveFile Id="FileKey3" Directory="APPCORE" Name="*" On="uninstall" />
                                
    </Component>
</Directory>
</Directory>
</Directory>
</Directory>

使用 Permission 或 PermissionEx 更改文件权限仅适用于 created/installed 具有相同设置的文件。

在你的情况下,使用 cacls 将解决问题。

<!-- Edit file permissions -->
<CustomAction Id='UnlockFile' Directory='TARGETDIR' ExeCommand='echo Y | cacls "[MyFilePathProperty]" /C /E /G Users:W' Return='asyncNoWait' Execute='deferred'/>
<InstallExecuteSequence>
    <Custom Action='UnlockFile' Before='InstallFinalize'>NOT REMOVE</Custom>
</InstallExecuteSequence>