WiX 安装程序会在卸载时删除文件,但不会在升级时删除文件

发布于 2024-09-10 17:30:09 字数 903 浏览 8 评论 0原文

我有一个使用 WiX 安装程序安装的程序。

程序本身会在 [CommonAppDataFolder]\[MyAppName]\ 目录中创建许多文件。这些文件都具有相同的扩展名(我们称之为 .dat)。

升级时,我想保留这些文件。
卸载时,我想删除这些文件。

我目前正在删除文件,如下所示:

<Directory Id='CommonAppDataFolder'>
  <Directory Id='MyCommonAppDataFolder' Name='MyAppName'>
    <Component Id='RemoveFilesComponent' Guid='71cb0cd8-8459-4a8f-89b7-f00977aa7b70'>
      <RemoveFile Id='RemoveFiles' Name='*.dat' On='uninstall'/>
    </Component>
  </Directory>
</Directory>

并且我这样做是为了方便升级:

<InstallExecuteSequence>
  <RemoveExistingProducts After='InstallInitialize'/>
</InstallExecuteSequence>

现在,当我卸载时,.dat 文件将被正确删除。
但是,当我升级时,.dat 文件也会被删除。我猜是因为升级是在以前的版本上执行卸载。

我是否正确地处理这个问题?如何在升级时保留文件,同时在卸载时删除它们?

I have a program that installs with a WiX installer.

The program itself creates a number of files in the [CommonAppDataFolder]\[MyAppName]\ directory. These files all have the same extension (lets call it .dat).

On upgrading, I want to retain these files.
On uninstalling, I want to remove these files.

I am currently deleting the files as so:

<Directory Id='CommonAppDataFolder'>
  <Directory Id='MyCommonAppDataFolder' Name='MyAppName'>
    <Component Id='RemoveFilesComponent' Guid='71cb0cd8-8459-4a8f-89b7-f00977aa7b70'>
      <RemoveFile Id='RemoveFiles' Name='*.dat' On='uninstall'/>
    </Component>
  </Directory>
</Directory>

And I have this to facilitate upgrades:

<InstallExecuteSequence>
  <RemoveExistingProducts After='InstallInitialize'/>
</InstallExecuteSequence>

Now, when I uninstall, the .dat files are removed correctly.
However, when I upgrade, the .dat files are also removed. I guess because an upgrade is performing an uninstall on the previous version.

Am I approaching this problem correctly? How can I retain the files on upgrade, while removing them on uninstall?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吲‖鸣 2024-09-17 17:30:09

您是否尝试过向“RemoveExistingProducts”添加条件?这就是我要做的。

<RemoveExistingProducts After='InstallInitialize'>(NOT UPGRADINGPRODUCTCODE) AND (Installed)</RemoveExistingProducts>

Have you tried adding a condition to the RemoveExistingProducts? This is what I would do.

<RemoveExistingProducts After='InstallInitialize'>(NOT UPGRADINGPRODUCTCODE) AND (Installed)</RemoveExistingProducts>
感受沵的脚步 2024-09-17 17:30:09

一种选择是切换到小更新。这有很多限制,因此并不像听起来那么容易。

One option would be to switch to a minor update. That has a lot of restrictions so it isn't as easy as it sounds.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文