2

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

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

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

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

例如:文件内容

  <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

4 回答 4

0

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

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

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

问候瓦特萨

于 2010-04-20T11:00:58.303 回答
0

财产

通常每当我们将外部文件添加到 Application 文件夹中时Setup and Deployment,单击它们properites并选择名为Permanent: Trueand的选项Exclude: False。这不会覆盖现有文件(在安装路径中)。

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

于 2013-04-10T14:48:50.827 回答
0

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

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
于 2010-04-19T06:26:49.803 回答
0

有理由不使用内置的用户配置设置吗?

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

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

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

否则,您可能需要执行某种安装后脚本来修改或安装配置文件(如果它们不存在)。

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

于 2010-04-19T06:26:57.367 回答