我有一个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>
提前致谢
答案 0 :(得分:0)
您可能应该将配置文件写入ApplicationData文件夹。你可以找到它的路径:
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
答案 1 :(得分:0)
是否有理由不使用内置用户configuration settings?
在阻止这些文件被覆盖方面,我认为没有办法使用默认的MSI设置。
是否要在计算机上已有的配置设置与正在安装的设置之间进行合并,并使用计算机上不存在的任何设置更新配置文件?或者你只是想避免这些文件被覆盖并安装应用程序的其他部分?
我能想到的最简单的选择是根本没有安装程序中的配置文件,并让应用程序处理该情况并在无法找到它们的情况下创建它们。
否则你可能需要做一些修改或安装配置文件的安装后脚本(如果它们不存在)。
需要注意的一点是,我对MSI的了解远非详尽无遗,因此可能有办法不覆盖特定文件。
答案 2 :(得分:0)
是的,在安装之前没有使用内置的配置设置来配置我的应用程序。
实际上,我需要完成的工作是你所猜到的......即 “如果机器上不存在该文件,则使用默认内容创建配置文件” “如果文件已在机器上,则合并配置设置”
我应该使用自定义安装程序进行此验证吗?
此致 跋蹉
答案 3 :(得分:0)
通常每当我们在Setup and Deployment
中的“应用程序”文件夹中添加外部文件时,请点击他们的properites
并选择名为Permanent: True
和Exclude: False
的选项。这不会覆盖现有文件(在安装路径中)。
此外,如果您想使Myproduct.exe.config
永久保留,那么您可以将此文件添加到Setup and Deployment
中的Application文件夹,并按照我之前说过的方式调整其属性。这可以防止覆盖Myproduct.exe.config
。我试过这个,为我工作。但是当我构建项目时,我常常收到警告Two or more objects have the same target location ('[targetdir]\Myproduct.exe.config').