安装较新版本时,请避免覆盖现有文件

时间:2010-04-19 06:13:16

标签: .net setup-deployment

我有一个VS2008 Windows应用程序项目(WinProject),它由安装项目(InstallationProject)部署,其中将属性RemovePreviousVersions设置为True。

在我的应用程序中,对于用户进行的每个配置,winapp将配置写入xml文件(存储在C:\ Application Name \ Files \文件夹中),该文件还包括保存配置的路径。

现在,当我构建新版本的安装程序时,此文件夹和文件将被覆盖,因为我将 AlwaysCreate 标记设置为 True

我的问题是如何避免这些旧文件被覆盖,同时从安装程序获取更新文件。

Ex:文件内容

  <PriceFiles>
    <Name>arr</Name>
    <Path>C:\NewTool\arr.xml</Path>
    <UserDefined>true</UserDefined>
  </PriceFiles>
  <ReferenceProjects>
    <Name>studio</Name>
    <Path>C:\NewTool\ReferenceProjects\6cd3a9e9-ad65-475e-953b-128915a496cd.xml</Path>
    <UserDefined>true</UserDefined>
    <CreatedBy>Admin</CreatedBy>
  </ReferenceProjects>

提前致谢

4 个答案:

答案 0 :(得分:0)

您可能应该将配置文件写入ApplicationData文件夹。你可以找到它的路径:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

答案 1 :(得分:0)

是否有理由不使用内置用户configuration settings

在阻止这些文件被覆盖方面,我认为没有办法使用默认的MSI设置。

是否要在计算机上已有的配置设置与正在安装的设置之间进行合并,并使用计算机上不存在的任何设置更新配置文件?或者你只是想避免这些文件被覆盖并安装应用程序的其他部分?

我能想到的最简单的选择是根本没有安装程序中的配置文件,并让应用程序处理该情况并在无法找到它们的情况下创建它们。

否则你可能需要做一些修改或安装配置文件的安装后脚本(如果它们不存在)。

需要注意的一点是,我对MSI的了解远非详尽无遗,因此可能有办法不覆盖特定文件。

答案 2 :(得分:0)

是的,在安装之前没有使用内置的配置设置来配置我的应用程序。

实际上,我需要完成的工作是你所猜到的......即 “如果机器上不存在该文件,则使用默认内容创建配置文件” “如果文件已在机器上,则合并配置设置”

我应该使用自定义安装程序进行此验证吗?

此致 跋蹉

答案 3 :(得分:0)

Property

通常每当我们在Setup and Deployment中的“应用程序”文件夹中添加外部文件时,请点击他们的properites并选择名为Permanent: TrueExclude: False的选项。这不会覆盖现有文件(在安装路径中)。

此外,如果您想使Myproduct.exe.config永久保留,那么您可以将此文件添加到Setup and Deployment中的Application文件夹,并按照我之前说过的方式调整其属性。这可以防止覆盖Myproduct.exe.config。我试过这个,为我工作。但是当我构建项目时,我常常收到警告Two or more objects have the same target location ('[targetdir]\Myproduct.exe.config').