我的要求是,当安装旧的安装程序包时,在ProgramData文件夹中使用系统权限创建文件(Config.txt(。从代码来看,没有管理员权限,我们无法删除该文件。因此,在安装较新的安装程序时,我想更改文件的权限,以便从代码中删除该文件。
我是Wix安装程序的新手,我正在尝试如下所示。但它不起作用。
下面是代码片段:
<Property Id="PROGRAMDATA" Value="C:ProgramDataTestAppConfig"/>
<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更改文件权限仅适用于由相同设置创建/安装的文件。
在你的情况下,使用仙人掌可以解决问题。
<!-- 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>