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

.NET 8桌面ClickOnce部署更新时随机触发System.Deployment异常

.NET 8 ClickOnce应用更新阶段随机触发System.ArgumentException激活异常

问题现象

初始发布安装流程正常,但后续应用更新阶段会随机出现激活失败,抛出System.ArgumentException(提示“值超出预期范围”),异常源为System.Deployment。调整发布设置或重装应用后仅能正常完成几次更新,问题仍会复现。

错误日志

平台版本信息
Windows             : 10.0.19045.0 (Win32NT)
Common Language Runtime     : 4.0.30319.42000
System.Deployment.dll       : 4.8.9176.0 built by: NET481REL1LAST_B
clr.dll             : 4.8.9241.0 built by: NET481REL1LAST_C
dfdll.dll           : 4.8.9176.0 built by: NET481REL1LAST_B
dfshim.dll          : 10.0.19041.30000 (WinBuild.160101.0800)
来源
部署URL            : file:///C:/Users/operator/AppData/Roaming/Microsoft/Internet%20Explorer/Quick%20Launch/User%20Pinned/TaskBar/eKarta.appref-ms%7C
部署提供程序URL       : file://-/APPS/eKarta2.0/e-karta.application
错误摘要
以下为错误摘要,详细信息见日志后续部分。
* 激活应用C:\Users\operator\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\eKarta.appref-ms|时引发异常。检测到以下失败信息:
+ 值超出预期范围。
组件存储事务失败摘要
未检测到事务错误。
警告
* 此应用的清单无签名,签名验证将被忽略。
操作进度状态
* [2024/6/10 07:48:21] : 开始激活C:\Users\operator\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\eKarta.appref-ms|。
* [2024/6/10 07:48:21] : 按部署要求执行必要的更新检查。
错误详细信息
操作期间检测到以下错误。
* [2024/6/10 07:48:21] System.ArgumentException - 值超出预期范围。
- 源: System.Deployment
- 堆栈跟踪:
在 System.Deployment.Application.NativeMethods.CorLaunchApplication(UInt32 hostType, String applicationFullName, Int32 manifestPathsCount, String[] manifestPaths, Int32 activationDataCount, String[] activationData, PROCESS_INFORMATION processInformation)
在 System.Deployment.Application.ComponentStore.ActivateApplication(DefinitionAppId appId, String activationParameter, Boolean useActivationParameter)
在 System.Deployment.Application.SubscriptionStore.ActivateApplication(DefinitionAppId appId, String activationParameter, Boolean useActivationParameter)
在 System.Deployment.Application.ApplicationActivator.Activate(DefinitionAppId appId, AssemblyManifest appManifest, String activationParameter, Boolean useActivationParameter)
在 System.Deployment.Application.ApplicationActivator.ProcessOrFollowShortcut(String shortcutFile, String& errorPageUrl, TempFile& deployFile)
在 System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl, Uri& deploymentUri)
在 System.Deployment.Application.ApplicationActivator.PerformDeploymentActivationWithRetry(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl)
--- 上一异常发生位置的堆栈跟踪结束 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Deployment.Application.ApplicationActivator.PerformDeploymentActivationWithRetry(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl)
在 System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state)
组件存储事务详细信息
无可用事务信息。

解决方案

1. 清理ClickOnce缓存

  • 打开命令提示符,执行命令清理用户级ClickOnce缓存:
    rundll32 dfshim CleanOnlineAppCache
    
  • 手动删除用户缓存目录:C:\Users\<用户名>\AppData\Local\Apps\2.0,操作前确保应用已完全关闭。

2. 修复任务栏快捷方式异常

日志显示激活路径指向任务栏固定的快捷方式,大概率是快捷方式损坏或路径编码异常:

  • 取消任务栏上的应用固定,从C:\Users\<用户名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs找到应用官方快捷方式,重新固定到任务栏。
  • 避免直接从部署URL生成的临时快捷方式进行固定,使用安装后自动创建的正式快捷方式。

3. 修正部署URL路径

日志中部署提供程序URL格式异常(file://-/APPS/eKarta2.0/e-karta.application),需调整为标准路径:

  • 发布时将“安装文件夹URL”改为正确的UNC共享路径(如file://///servername/APPS/eKarta2.0/e-karta.application)或本地绝对路径(如file:///C:/APPS/eKarta2.0/e-karta.application)。
  • 重新发布应用,确保部署路径配置无误。

4. 启用清单签名

日志提示应用清单无签名,可能导致更新校验逻辑异常:

  • 在项目发布设置中,勾选“对应用程序和部署清单签名”,可使用自签名证书进行测试,正式环境建议使用正规代码签名证书。
  • 重新发布所有后续版本,确保清单签名一致性。

5. 调整更新检测策略

避免启动时强制同步更新引发的激活冲突:

  • 将更新模式从“应用程序启动前检查更新”改为“应用程序启动后检查更新”,在发布设置中调整该选项。
  • 实现后台异步更新逻辑,示例代码:
    using System.Deployment.Application;
    using System.Windows.Forms;
    
    private async void CheckForUpdatesAsync()
    {
        if (ApplicationDeployment.IsNetworkDeployed)
        {
            try
            {
                var ad = ApplicationDeployment.CurrentDeployment;
                var updateInfo = await ad.CheckForUpdateAsync();
                if (updateInfo.UpdateAvailable)
                {
                    await ad.UpdateAsync();
                    MessageBox.Show("应用已完成更新,请重启");
                    Application.Restart();
                }
            }
            catch (DeploymentException)
            {
                // 捕获更新异常,避免阻断应用启动
            }
        }
    }
    

6. 修复.NET Framework运行时

异常涉及System.Deployment.dll等.NET Framework 4.8组件,需修复运行时:

  • 下载并安装.NET Framework 4.8.1修复工具,修复损坏的运行时文件。
  • 安装Windows系统最新更新,确保所有.NET Framework相关安全补丁已部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:14:58