Visual Studio安装项目 - 有条件地安装文件

时间:2010-12-17 18:42:33

标签: visual-studio installer setup-project

我有一个VS 2008安装项目。如果目标系统上尚不存在XML文件,我只想安装它。安装程序为非版本化文件覆盖rules,确保如果文件未在目标系统上进行修改,则永远不会覆盖该文件。但是我希望从不覆盖该文件。可以在文件的Visual Studio安装程序属性中的文件上设置 Condition 属性。 条件属性检查文件是否存在的正确语法是什么,只有在不存在时才安装?

2 个答案:

答案 0 :(得分:2)

您需要转到“启动条件”选项卡,然后在目标计算机中搜索要检查的文件。启动条件将允许您指定将设置为文件路径的属性的名称(如果存在),否则它将为空。您现在可以将此属性用作文件中的条件。

答案 1 :(得分:0)

我能够使用启动条件来设置属性,并将其用于条件安装文件,因此我将'heavyd'标记为正确的答案。但是,无法像建议的那样有效地使用文件搜索(请参阅答案评论)。相反,我使用MSI ComponentID进行Windows Installer搜索(VS 2008安装项目中可用的三种搜索类型之一),如下所示(我发现了here技术):

  1. 已安装产品1并且其文件名为MyFile.txt。
  2. 您使用ORCA(来自Windows Installer SDK)查看File表,并找到代表MyFile.txt的行。
  3. 获取Component_列的值,然后打开“组件表”。
  4. 在组件表中,您可以在Component列中找到具有Component_值的行,并获取ComponentID。将此值复制到剪贴板。关闭ORCA。
  5. 在安装项目中,打开“启动条件编辑器”并添加Windows Installer组件搜索。对于新搜索的ComponentID属性,请粘贴ComponentID。
  6. 复制Property属性。它应该像COMPONENTEXISTS1。
  7. 打开文件系统编辑器并选择应用程序文件夹,然后选择要有条件安装的文件。
  8. 将Condition属性编辑为COMPONENTEXISTS1 = FALSE。
  9. 如果希望每次运行安装程序时评估条件(而不仅仅是第一次),请将Transitive属性设置为true。
  10. 现在,仅当MyFile.txt不存在时才会安装。
  11. 这种技术有一点需要注意:对安装进行修复会导致文件被删除,即使该文件被标记为永久文件!不好。我通过添加一些自定义操作(调用vbscript文件)来备份和恢复我的文件来解决这个问题。

    实现如此简单的任务真是太麻烦了:在初始安装时安装一次文件,然后再也不会覆盖它。

    如果有人有更好的解决方案,我会全力以赴。