WIX:在新安装时未复制的文件

时间:2015-04-02 20:09:20

标签: wix

所以,我有一个WIX项目,可以安装新安装或以前安装的产品。如果已安装此产品,则需要保留3个不同文件夹中的多个文件。此项目还需要将这3个不同文件夹的内容复制到另一组文件夹(两个不同位置的相同内容)。为了实现这一点,我设置了我的项目,如果文件尚不存在,首先尝试写入原始文件夹,然后复制这些文件夹的内容。在已经存在这些文件的升级中,这可以正常工作。在全新安装时,不会创建第二组文件夹,但所有文件都会创建。

我的假设,我可能不正确,是msi试图在文件夹创建之前复制文件夹。这将导致文件夹不存在于它们应该被复制到的区域中,因为没有任何内容可以复制。有没有办法在尝试复制文件之前确保文件已生成?有没有更好的方法来解决这个问题,我没有看到?

编辑:

我打算尝试清理一下。我要做的是以下(伪):

1)查看c:\ options中是否存在选项文件(hi.opt),如果没有则创建它。 2)将该文件复制到c:\ options \ opt2015。

我为3个不同的文件夹做了3次。我使用NeverOverwrite参数在c:\ options文件夹中使用Wix创建初始文件。这部分效果很好;创建的文件没有问题,如果它们已经存在,则不会覆盖任何文件。问题出在第二步,我正在使用CopyFile Wix命令。这只会将c:\ options文件夹中的部分文件复制到c:\ options \ opt2015文件夹中。根据系统的初始设置(如果c:\ options中的文件存在与否),某些文件将被复制,而其他文件则不会复制。它不是随机的,结果每次都是可重复的,但似乎没有理由为什么某些文件会复制而其他文件不依赖于系统的初始设置。

我希望这是有道理的并且更加清晰,但我认为这会让事情变得更糟!这是奇怪的行为,因为对我而言,看起来一切都应该正常工作,但事实并非如此(并不是每个错误)。

EDIT2:

经过更多工作并创建一个完全在WIX我的团队之外运行的vb脚本,我确定在安装过程中WIX没有看到这些文件,即使它们确实存在。我们未找到任何权限问题,并且安装在管理员帐户上以管理员身份运行。通过VBS或通过Wix CopyFile命令执行复制会产生相同的结果;系统中已存在的文件未被复制。还有什么想法吗?如果我们找到解决方案,我一定会发布它,因为这只是变得很奇怪。

3 个答案:

答案 0 :(得分:1)

我相信只要您在InstallFiles操作运行后尝试复制文件,您的安装程序设计就会起作用。您应该通过执行以下操作之一将文件从第一组文件夹复制到第二组文件夹:

  • 运行在InstallFiles
  • 之后执行的延迟自定义操作
  • 使用MoveFiles操作

答案 1 :(得分:1)

评论太长了,但也许不是答案......

对于以前安装的产品"实际上并没有这样的事情,特别是如果您最终在程序/功能中有多个实例,并且文件可能有也可能没有相同的组件ID互相替换 - 这将是一团糟。如果您需要升级已安装的产品,请使用主要升级,这似乎是您的最佳选择。如果您已经在编写自定义操作以执行其中某些操作"请先尝试写入原始文件夹"然后,我不知道在安装过程中发生了什么或者你在做什么。通常,如果您在新安装中需要这些文件,则将它们添加到新的主要升级MSI中。如果需要从较旧的产品中复制较旧的现有文件,请使用afterInstallExecute进行主要升级,并编写自定义操作代码以在InstallFiles操作之前复制它们。或者CopyFile WiX元素可以执行此操作,请参阅没有fileid的组件下的元素部分。

http://wixtoolset.org/documentation/manual/v3/xsd/wix/copyfile.html

答案 2 :(得分:0)

嗯,有时会发生错误,错误完全在别处。事实证明,同时安装的程序链中的另一个程序的卸载程序正在销毁该文件夹。不幸的是,当产品未被触摸10年时会发生这种情况。感谢您的贡献,他们非常乐于助人。即使我在错误的路径上走了一段时间,我仍然在测试中使用它们,并且更加坚定地检查安装顺序。