【问题标题】:Visual Studio Setup Project conditional if File Exists如果文件存在,则 Visual Studio 安装项目有条件
【发布时间】:2021-06-26 01:54:53
【问题描述】:

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

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

该文件名为“database.dat”,在“属性”下,我看到一个“条件”属性,但我不熟悉在其中放置什么。

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

编辑:

它已经存在的原因是,从以前的安装中会有来自我们不想覆盖的数据集/数据表的数据。

【问题讨论】:

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


    【解决方案1】:

    仅安装一个文件,如果它不存在,请按照以下步骤操作:

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

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

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

    就是这样。

    来源(因为我只需要自己弄清楚):

    【讨论】:

    • 你是一个美丽的人。谢谢你,我最亲密的朋友。
    • @ACK_stoverflow,谢谢你让我开心:) 这是我今天阅读的第一篇互联网。我现在笑得很开心!
    • Folder 可以包含此处描述的任何系统文件夹名称:msdn.microsoft.com/en-US/library/aa372057(v=vs.80).aspx,例如[AppDataFolder]ProductName\SubFolder.
    • 当我尝试升级时失败,但适用于正常安装。知道为什么它在升级时不起作用吗?
    • 我怕升级失败,因为升级从卸载开始,所以文件不存在,条件为真,复制发生
    【解决方案2】:

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

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

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

    【讨论】:

    • 我对此进行了测试,确实,它没有覆盖自安装以来已更改的文件。
    【解决方案3】:

    Condition 属性正是您所需要的:Exists 条件。简化的例子是:

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

    另见this topic

    【讨论】:

    • 这在 Visual Studio 安装项目中文件的 Condition 属性中看起来如何?
    【解决方案4】:

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

    【讨论】:

    • 请将其作为评论添加到提到的答案中。
    【解决方案5】:

    在安装项目上,右键单击要保留在安装文件夹中的文件,选择属性并将永久设置为 true。

    【讨论】:

    • 这并不能解决问题。如果您标记为永久并卸载,然后更改文件并再次安装,它将被覆盖。
    • 永久选项只是确保在卸载应用程序时不会删除文件。
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    相关资源
    最近更新 更多