2010-07-20 118 views
10

我有一个程序可以安装WiX安装程序。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文件也被删除。我猜是因为升级正在执行上一版本的卸载。

我正确接近这个问题吗?如何在升级时保留这些文件,同时在卸载时将其删除?

+0

你有没有找到解决这个问题的方法。 – darbid 2013-07-04 02:17:53

+0

很久以前,但不是我能记得的。我想我最终只是在卸载后将文件保留在CommonAppDataFolder中。 – MatthewKing 2013-07-04 04:15:07

+0

感谢Matt回答。 – darbid 2013-07-04 05:15:18

回答

1

一种选择是切换到次要更新。这有很多限制,所以它不像听起来那么容易。

+1

你的答案可能在wix刻录的早期阶段或之前,所以我想知道你是否愿意或现在可以以不同的方式回答这个问题。是一个可能的解决方案,用2个msi包创建一个wix引导程序。他的.dat文件将位于第二个msi软件包中,不会升级。 – darbid 2013-07-04 02:22:24

+0

如果原包装的运输方式不同,可以做很多事情。我回答假设他需要处理发货。 – 2013-07-04 06:31:33

+0

@RobMensching有没有答案没有发货的包? (目前正在开发)这将是非常有益的。谢谢! – Eli 2015-11-15 13:13:37

2

您是否尝试将条件添加到RemoveExistingProducts?这是我会做的。

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

这看起来像我想要的,但当然这意味着升级时不会删除以前的版本。例如,我最终在“添加或删除程序”控制面板中为我的应用程序输入了多个条目。任何解决方法? – MatthewKing 2010-07-22 01:17:33

+1

您可以尝试将现有产品移除到InstallFinalize之后。这将删除任何更改的文件和注册表设置,但保留你没有做的。 IT也可能与你的产品ID或版本有关。操作系统可能完全认为它是一个不同的程序。 – 2010-07-22 15:58:38

相关问题