如果文件存在,Visual Studio设置项目是有条件的

时间:2010-11-05 00:02:01

标签: visual-studio-2008 setup-project setup-deployment

我的应用程序有一个安装/部署项目,它将某些文件(* .dll,* .dat)输出到应用程序文件夹。

我想设置一个条件来检查文件当前是否存在。如果没有,请写入,但如果是,请不要从包中安装。有可能吗?

该文件名为“database.dat”,在“属性”下,我看到“条件”属性,但我不熟悉放在那里的内容。

非常感谢任何输入。提前谢谢。

编辑:

它之前存在的原因是,从以前的安装中,我们不想覆盖DataSet / Data Table中的数据。

5 个答案:

答案 0 :(得分:27)

要仅安装文件,如果文件尚不存在,请执行以下步骤:

  1. 在设置项目的“启动条件”视图下添加“搜索目标计算机”条目。

  2. 填写FileName属性和Folder属性。

  3. Property属性应该是您能记住的常量,例如“MY_AWESOME_FILE_EXISTS
  4. 在项目的“文件系统”视图中,找到要安装的组件并将其添加到Condition属性“not MY_AWESOME_FILE_EXISTS
  5. 就是这样。

    消息来源(因为我只是想为自己解决这个问题):

答案 1 :(得分:1)

您应该只安装数据文件作为测试,以查看实际发生的情况。我这样说的原因是Windows Installer不会覆盖首次安装后已更改的文件。请参阅此规则:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370531(v=vs.85).aspx

在我看来,你可能根本不需要做任何事情。

答案 2 :(得分:0)

Condition-attribute正好符合您的需要:存在条件。简化示例是:

<Copy Condition="!Exists($(DestPath)database.dat)"
      SourceFiles="$(SrcPath)database.dat"
      DestinationFolder="$(DestPath)"/>

另见this topic

答案 3 :(得分:0)

在Setup Project上,右键单击要保留在安装文件夹中的文件,选择Properties并将Permanent设置为true。

答案 4 :(得分:0)

不幸的是,如果您使用 [TARGETDIR] 文件夹,Darren 的解决方案将不起作用。就我而言,我有一个使用 Sqlite 数据库的 winfomrs 应用程序,并且在升级应用程序时我不会覆盖数据库。 因此,我改用注册表检查,当安装应用程序时,会在注册表中创建一个密钥,并在卸载时删除。因此,在升级时,我会检查注册表项是否存在,如果存在,我会阻止使用 Darren 已经解释的数据库文件 Condition 属性复制空白数据库。它工作正常。