You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ClickOnce部署异常:部分用户点击启动链接报错直接运行EXE正常

根因定位

从报错栈可以直接定位核心问题:ClickOnce启动流程与直接双击EXE的配置文件加载逻辑存在差异,具体差异如下:

  • 直接运行Apps\2.0下的EXE时,.NET运行时仅会加载EXE同目录下的MyApplication.exe.config应用级配置文件,该文件是部署时打包的固定文件,不存在损坏问题
  • 通过ClickOnce启动链接打开应用时,.NET运行时会额外加载用户级配置文件user.config,该文件存储在%localappdata%\Selerant\下对应带随机哈希的应用目录中,仅在当前用户本地生成、读写。报错栈中的System.Xml.XmlException就是解析该文件时遇到了非法字符、文件不完整等损坏问题,后续触发了配置加载失败、Locale类静态初始化失败的连锁异常。

只有部分用户报错的原因也很明确:只有这部分用户的本地user.config因为异常场景(程序崩溃时刚好在写配置、系统断电、磁盘写入错误等)出现了损坏,其余用户的本地配置文件正常,因此不会触发报错。

终端用户临时修复方案

遇到报错的用户可通过以下步骤快速恢复:

  1. 关闭所有MyApplication相关进程
  2. 打开资源管理器,在地址栏输入%localappdata%\Selerant回车进入目录
  3. 删除所有名称前缀包含MyApplication、带随机哈希字符串的子文件夹
  4. 重新点击ClickOnce启动链接,程序会自动生成全新的合法user.config,即可正常启动
开发/部署侧永久修复方案

要从根源避免该问题复发,可做以下优化:

  • 在程序入口逻辑的最前端(早于任何ConfigurationManager调用、Locale类初始化)增加user.config合法性校验逻辑:如果检测到配置文件解析失败,自动将损坏的配置文件备份后删除,程序启动时会自动重建默认配置
  • 排查现有代码中用户配置写入逻辑,避免多线程同时写配置、异常中断写入的场景,写入配置时建议先写临时文件再替换原文件,避免写入中断导致原文件损坏
  • 可在app.config中添加以下配置,优化配置加载容错性:
<configuration>
  <runtime>
    <!-- 禁用不必要的发布者证据生成,加快ClickOnce启动速度,减少异常概率 -->
    <generatePublisherEvidence enabled="false"/>
  </runtime>
</configuration>

内容的提问来源于stack exchange,提问作者Andrea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:36:01