【问题标题】:C# application user settings maintained during update更新期间维护的 C# 应用程序用户设置
【发布时间】:2019-04-21 18:02:27
【问题描述】:

我有一个 C# 应用程序,它当前将用户设置/配置存储在单独的 xml 文件中。我的应用程序使用 wix 安装程序,并且我想知道如果用户在安装应用程序的较新版本时没有先删除旧版本,是否有办法保留 xml 文件。 xml 文件存储在 CommonAppData 文件夹中,如果卸载应用程序,则应将其删除。

备用问题 - 有没有比我目前的方法更好的方法?

更新

我已经实现了以下代码:

    <CustomAction Id="Cleanup_Files" Directory="CompanyFolder" ExeCommand="cmd /C RD 
        &quot;[CommonFolder]&quot; /s /q" Execute="deferred" Return="ignore" HideTarget="no" 
       Impersonate="no" />
    <InstallExecuteSequence>
      <Custom Action="Cleanup_Files" Before="RemoveFiles" >
        Installed AND REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE
      </Custom>
    </InstallExecuteSequence>

这会在卸载时根据需要删除 CommonFolder 目录,但在升级时仍会删除该目录。实现这一目标需要进行哪些更改?

【问题讨论】:

    标签: c# configuration wix installation settings


    【解决方案1】:

    最简单的做法是:不要通过安装程序安装此 XML 文件,而是让它由应用程序创建(如果它不存在)。这样,更新将不会触及文件。 在这种情况下,还可以从旧(或新)版本迁移设置。

    但是,该文件在卸载时也将保留。如果在这种情况下需要将其删除,您可以通过带有Installed AND REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE等条件的自定义操作来执行此操作

    【讨论】:

    • 感谢您的回复,我之前没有使用过自定义操作。如何构建自定义操作以及将其放置在 product.wxs 文件中的什么位置?
    • 这个答案中有一个非常简单的方法:stackoverflow.com/a/17513551/2142950。更智能的解决方案需要一些 C# 编码,
    • 您好 Klaus,感谢您的建议,我仍然无法在升级期间将文件保留在适当的位置(请参阅我的更新)
    • 您可以在 %temp% 目录中找到安装程序日志。在更新过程中卸载旧产品的日志文件中,UPGRADINGPRODUCTCODE的值是多少?
    【解决方案2】:

    我的解决方案是遵循 Klaus 的建议,但对我的 product.wxs 文件进行了一些额外的更改。我必须将“AllowSameVersionUpgrades="yes"' 添加到 MajorUpgrade 部分。

        <MajorUpgrade AllowSameVersionUpgrades="yes" DowngradeErrorMessage="A newer version of 
        [ProductName] is already installed." />
    

    感谢 Klaus 的所有建议!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 1970-01-01
      • 2010-09-25
      • 2011-03-31
      相关资源
      最近更新 更多