【问题标题】:Proper way to install and uninstall a file in the Application Data folder, in a perMachine WiX install project在 perMachine WiX 安装项目中安装和卸载 Application Data 文件夹中文件的正确方法
【发布时间】:2016-05-16 13:54:14
【问题描述】:

我正在使用 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:\Users\FirstUser\AppData\Roaming\Manufacturer\ProductName\user.settings

如果我登录到另一个用户帐户(“SecondUser”),一个新的设置文件会出现在

c:\Users\SecondUser\AppData\Roaming\Manufacturer\ProductName\user.settings

但是,在我以管理员帐户(“FirstUser”)登录后运行卸载程序后,设置文件仅从 FirstUser 的 AppData 文件夹中删除。 SecondUser 的 AppData 文件夹中的设置文件没有被删除,它留在磁盘上。

在 Application Data 文件夹中安装文件的正确方法是什么,以便为每个用户创建它,并在卸载时为每个用户删除?

【问题讨论】:

  • “在 Application Data 文件夹中安装一个文件,以便为每个用户创建它”:让应用程序创建它。它没有安装。它不会被卸载。请参阅博客@PhilDW referenced

标签: wix windows-installer


【解决方案1】:

看来您的做法已经正确。卸载无法可靠地枚举所有其他配置文件以删除数据。另见:

https://blogs.msdn.microsoft.com/oldnewthing/20070917-00/?p=25103/

如果剩下的文件很重要,另一种方法是重新设计应用程序。每个用户的设置可以在每台机器位置的 DB 或 Xml 文件(作为示例)中,在卸载时可以将其删除(假设它没有被升级)。

您收到警告是因为 ICE 测试是静态的 - 他们不知道安装是按用户还是按机器进行。措辞不好 - 这意味着每台机器 install 不会将文件安装到每个用户的目录版本。

【讨论】:

    猜你喜欢
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    相关资源
    最近更新 更多