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
C# 在WIX上,重新安装时如何从旧安装复制文件_C#_Wix - Fatal编程技术网

C# 在WIX上,重新安装时如何从旧安装复制文件

C# 在WIX上,重新安装时如何从旧安装复制文件,c#,wix,C#,Wix,我有一个使用WIX安装的产品。 这是我的安装顺序: <InstallExecuteSequence> <RemoveExistingProducts Before="InstallInitialize" /> </InstallExecuteSequence> 据我所知,在重新安装时会删除整个旧版本。 这是我想要保留的行为,但我还想从中复制特定的文件 旧版本 我该怎么做?要想从新MSI的部署中实现您想要的功能几乎是不可能的,因为在删除需要提升权限的

我有一个使用WIX安装的产品。 这是我的安装顺序:

<InstallExecuteSequence>
   <RemoveExistingProducts Before="InstallInitialize" />
</InstallExecuteSequence>

据我所知,在重新安装时会删除整个旧版本。 这是我想要保留的行为,但我还想从中复制特定的文件 旧版本


我该怎么做?

要想从新MSI的部署中实现您想要的功能几乎是不可能的,因为在删除需要提升权限的现有产品之前,您无法执行自定义操作(如果您没有在UAC控制的文件夹(如prgram文件)中安装,这可能会起作用,但我从未尝试过这样做)

一种解决方法是通过创建引导程序来修改现有的MSI(我不知道这是否有效!)–请参阅此问题的答案:

当我以前编写安装程序时,我编写了一个自定义操作,在卸载时将文件复制到临时文件夹中(升级时新MSI会调用以前版本的MSI卸载),然后在新MSI安装时检查并清除此文件夹(升级部分)。如果您只是卸载(而不是升级),这种方法确实会留下很多文件挂起,但因为我只对配置文件感兴趣–这实际上非常有效,因为如果客户返回,我不会丢失他们的所有配置

当然,这并不能解决您眼前的问题,因为这只会在发布卸载时备份相关文件的版本后才开始工作——但在过去的3年中,它对我来说一直运行良好


HTH

如果我能知道以前的安装文件夹是什么,我想我可以用file标记中的Source属性来完成