WIX:在新安装时没有复制文件
因此,我有一个WIX项目,可以安装全新安装,也可以安装以前的产品安装。本产品(如果已安装)有3个不同文件夹中的多个文件需要保留。该项目还需要将这3个不同文件夹的内容复制到另一组文件夹中(两个不同位置的内容相同)。为了做到这一点,我已经建立了我的项目,首先尝试写入原始文件夹,如果文件不存在,然后复制这些文件夹的内容。在这些文件已经存在的升级中,这可以正常工作。在全新安装中,第二组文件夹不会被创建,但所有文件都可以。WIX:在新安装时没有复制文件
我的假设,我可能不正确,是msi试图在文件夹甚至创建之前复制文件夹。这会导致文件夹不存在于它们应该被复制的区域,因为没有任何可复制的地方。有没有一种方法可以确保在尝试复制文件之前生成文件?有没有更好的方法去解决这个问题,我没有看到?
编辑:
我将尽力澄清这一点。我想要做的是以下(伪):
1)看看选项文件(hi.opt)是否存在于c:\ options中,如果没有创建它。 2)将该文件复制到c:\ options \ opt2015。
我为3个不同的文件夹做了3次。我使用NeverOverwrite参数在c:\ options文件夹中使用Wix创建初始文件。这部分工作很棒;文件创建时没有问题,如果它们已经存在,则不会覆盖它们。问题出在哪里,是我使用CopyFile Wix命令的第二步。这只会将一些文件从c:\ options文件夹复制到c:\ options \ opt2015文件夹中。根据系统的初始设置(如果c:\ options中的文件存在或不存在),某些文件将被复制,而其他文件则不会复制。这不是随机的,结果每次都是可重复的,但似乎没有理由为什么某些文件复制,而其他文件不依赖于系统的初始设置。
我希望这是有道理的,并且有点更清楚,但我认为这会让事情变得更糟!这是奇怪的行为,因为对我来说,它看起来像一切都应该工作,但它不(但并不是每个错误)。
EDIT2:
后更多的工作,创造其运行完全维克斯的超出了我和我的团队已经确定,这些文件就是不被维克斯即使他们确实存在在安装过程中出现了VB脚本。我们没有发现任何权限问题,并且安装以管理员身份在管理员帐户中运行。通过VBS或通过Wix CopyFile命令执行复制,结果相同;系统中已存在的文件不会被复制。还有什么想法?如果我们找到解决方案,我一定会发布它,因为这太奇怪了。
我相信只要您尝试在InstallFiles操作运行后复制文件,您的安装程序设计就应该可以工作。
- 运行执行InstallFiles后
- 递延自定义操作使用MoveFiles行动
我一直在使用以下内容:
当您查看完成的MSI的InstallExecuteSequence表时,以下顺序是什么操作:RemoveExistingProducts,InstallFiles,MoveFiles? – jbudreau 2015-04-03 17:08:46
删除现有的产品是1401,InstallFiles是4000,MoveFiles 3800 – 2015-04-03 21:15:31
这是太长的评论,但可能不是答案....
没有像“以前的产品安装”这样的事情,特别是如果最终在程序/功能中包含多个实例,并且可能包含或不包含相同组件id的文件可能会相互替换 - 那将是一团糟。如果您需要升级已安装的产品,请使用主要升级,这似乎是您要使用此功能的位置。如果您已经在编写自定义操作来完成这项“首次尝试写入原始文件夹”,那么我不知道发生了什么或在安装过程中如何执行此操作。一般来说,如果您在新安装中需要这些文件,请将它们添加到新的主要升级MSI中。如果您需要从旧产品中复制较旧的现有文件,请使用afterInstallExecute进行重大升级,并编写自定义操作代码以在InstallFiles操作之前复制它们。或者CopyFile WiX元素可以做到这一点,查看关于没有fileid的组件下的元素部分。
http://wixtoolset.org/documentation/manual/v3/xsd/wix/copyfile.html
嗯,有时会发生,错误完全是在其他地方。事实证明,在同一时间安装的程序链中的另一个程序的卸载程序正在销毁该文件夹。不幸的是,这是产品10年未碰触时发生的情况。感谢您的贡献,他们非常有帮助。尽管我一直在错误的道路上走下去,但我仍然在测试中使用它们,并且更加坚定地检查安装顺序。
我现在发现如果文件存在,它有时无法工作。我将尝试使用自定义操作。 – 2015-04-03 17:05:31