我正在使用WiX Toolset v3.10.2构建MSI设置文件。我正在使用 InstallScope ='perMachine',因此程序安装在 Program Files 文件夹中。
但是,我需要将一个(设置)文件安装到当前用户的Application Data Roaming文件夹中。
<Directory Id="AppDataFolder">
<Directory Id="ManufacturerAppDataFolder" Name="Manufacturer">
<Directory Id="ProductAppDataFolder" Name="ProductName">
<Component Id="AppDataConfig" Guid="643DB270-8D85-467B-A6BA-9A54924655E0" Feature="MainApplication">
<RemoveFolder Id='RemoveProductAppDataFolder' Directory='ProductAppDataFolder' On='uninstall' />
<RemoveFolder Id='RemoveManufacturerAppDataFolder' Directory='ManufacturerAppDataFolder' On='uninstall' />
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Name="UserConfigLocation" Value='[ProductAppDataFolder]' KeyPath='yes' />
<File Source="Files\user.settings" />
</Component>
</Directory>
</Directory>
</Directory>
我正在运行 light.exe :
时收到此警告warning LGHT1076 : ICE91: The file 'user.settings' will be installed
to the per user directory 'ProductAppDataFolder' that doesn't vary based
on ALLUSERS value. This file won't be copied to each user's profile even
if a per machine installation is desired.
我正在Windows 10 PC的管理员用户(“FirstUser”)上安装MSI,并且设置文件已正确安装在
C:\用户\ FirstUser \应用程序数据\漫游\生产\名称\ user.settings
如果我登录其他用户帐户(“SecondUser”),则会在
处显示新的设置文件C:\用户\ SecondUser \应用程序数据\漫游\生产\名称\ user.settings
但是,在我登录管理员帐户(“FirstUser”)后运行卸载程序后,设置文件仅从FirstUser的AppData文件夹中删除。不会删除SecondUser的AppData文件夹中的设置文件,它将保留在磁盘上。
在Application Data文件夹中安装文件的正确方法是什么,因此它是为每个用户创建的,并且在卸载时也为每个用户删除了?
答案 0 :(得分:2)
看起来你已经以正确的方式做了这件事。卸载无法可靠地枚举所有其他配置文件以删除数据。另见:
https://blogs.msdn.microsoft.com/oldnewthing/20070917-00/?p=25103/
如果剩下的文件很重要,可以选择重新设计应用程序。每个用户的设置可以在每个机器位置的DB或Xml文件(作为示例)中,在卸载时可以将其删除(假设它未被升级)。
您收到警告是因为ICE测试是静态的 - 他们不知道安装是针对每个用户还是针对每台机器。它的措辞很糟糕 - 这意味着每台机器 install 不会将文件安装到每个用户的目录版本中。