我的应用程序有一个安装/部署项目,它将某些文件(* .dll,* .dat)输出到应用程序文件夹。
我想设置一个条件来检查文件当前是否存在。如果没有,请写入,但如果是,请不要从包中安装。有可能吗?
该文件名为“database.dat”,在“属性”下,我看到“条件”属性,但我不熟悉放在那里的内容。
非常感谢任何输入。提前谢谢。
编辑:
它之前存在的原因是,从以前的安装中,我们不想覆盖DataSet / Data Table中的数据。
答案 0 :(得分:27)
要仅安装文件,如果文件尚不存在,请执行以下步骤:
在设置项目的“启动条件”视图下添加“搜索目标计算机”条目。
填写FileName
属性和Folder
属性。
Property
属性应该是您能记住的常量,例如“MY_AWESOME_FILE_EXISTS
”Condition
属性“not MY_AWESOME_FILE_EXISTS
”就是这样。
消息来源(因为我只是想为自己解决这个问题):
答案 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 属性复制空白数据库。它工作正常。