Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WiX安装程序在卸载时删除文件,但不在升级时删除_Wix_Windows Installer_Upgrade_Uninstallation_Delete File - Fatal编程技术网

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

WiX安装程序在卸载时删除文件,但不在升级时删除,wix,windows-installer,upgrade,uninstallation,delete-file,Wix,Windows Installer,Upgrade,Uninstallation,Delete File,我有一个用WiX安装程序安装的程序 程序本身在[CommonAppDataFolder]\[MyAppName]\目录中创建了许多文件。这些文件都有相同的扩展名(我们称之为.dat) 在升级时,我想保留这些文件。 在卸载时,我想删除这些文件 我目前正在删除文件,如下所示: <Directory Id='CommonAppDataFolder'> <Directory Id='MyCommonAppDataFolder' Name='MyAppName'> &l

我有一个用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文件也会被删除。我猜是因为升级正在对以前的版本执行卸载


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

一个选项是切换到次要更新。这有很多限制,所以不像听起来那么简单。

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

<RemoveExistingProducts After='InstallInitialize'>(NOT UPGRADINGPRODUCTCODE) AND (Installed)</RemoveExistingProducts>
(不升级ProductCode)和(已安装)

这似乎是我想要的,但这当然意味着升级时不会删除以前的版本。例如,我的应用程序在“添加或删除程序”控制面板中有多个条目。有解决方法吗?您可以尝试在安装完成后删除现有产品。这将删除所有已更改的文件和注册表设置,但保留未更改的文件和注册表设置。它也可能与您的ProductID或版本有关。操作系统可能认为这是一个完全不同的程序。升级是内部卸载和重新安装吗?还是覆盖DLL/文件?你有没有找到解决这个问题的方法。很久以前,但我记不起来了。我想卸载后,我只是将文件留在CommonAppDataFolder中。感谢Matt的回答。您的回答可能在wix burn之前或早期阶段,因此我想知道您是否会或现在可以以不同的方式回答此问题。是使用2个msi包创建wix引导程序的可能解决方案。他的.dat文件将在第二个msi软件包中,不会升级。如果原始软件包的发货方式不同,很多事情都可以完成。我的回答是假设他需要处理装运的东西。@RobMensching没有装运的包裹有答案吗?(目前正在开发)这将非常有帮助。谢谢