none
clickonce 大规模部署(400台)的问题,大约1%的机器无法正常升级 RRS feed

  • 问题

  • 通过clickonce发布应用程序更新,每次更新大约有1%的机器无法完成自动升级
    通常会提示"无法启动应用程序。请与程序供应商联系。"
    查看错误日志,未升级成功的原因有很多,如:
    平台版本信息
    Windows : 5.1.2600.131072 (Win32NT)
    Common Language Runtime : 2.0.50727.832
    System.Deployment.dll : 2.0.50727.832 (QFE.050727-8300)
    mscorwks.dll : 2.0.50727.832 (QFE.050727-8300)
    dfdll.dll : 2.0.50727.42 (RTM.050727-4200)
    dfshim.dll : 2.0.50727.42 (RTM.050727-4200)


    部署 URL : xxxxx

    错误摘要
    以下是错误摘要,这些错误的详细信息列在该日志的后面。
    * 激活 xxxxx 导致异常。 检测到下列失败消息:
    + 参照的汇编没有安装在系统上。 (异常来自 HRESULT:0x800736B3)

    组件存储事务失败摘要
    未检测到任何事务错误。

    警告
    执行此操作的过程中未出现任何警告。

    操作进度状态
    * [2007-11-5 9:26:31] : 已启动 xxxxx 的激活过程。

    错误详细信息
    执行此操作期间检测到下列错误。
    * [2007-11-5 9:26:34] System.Runtime.InteropServices.COMException
    - 参照的汇编没有安装在系统上。 (异常来自 HRESULT:0x800736B3)
    - 源: System.Deployment
    - 堆栈跟踪:
    在 System.Deployment.Internal.Isolation.IStore.GetAssemblyInformation(UInt32 Flags, IDefinitionIdentity DefinitionIdentity, Guid& riid)
    在 System.Deployment.Internal.Isolation.Store.GetAssemblyManifest(UInt32 Flags, IDefinitionIdentity DefinitionIdentity)
    在 System.Deployment.Application.ComponentStore.GetSubscriptionStateInternal(DefinitionIdentity subId)
    在 System.Deployment.Application.SubscriptionStore.GetSubscriptionStateInternal(SubscriptionState subState)
    在 System.Deployment.Application.SubscriptionStore.CheckAndReferenceApplication(SubscriptionState subState, DefinitionAppId appId, Int64 transactionId)
    在 System.Deployment.Application.DownloadManager.DownloadDeploymentManifestDirectBypass(SubscriptionStore subStore, Uri& sourceUri, TempFile& tempFile, SubscriptionState& subState, IDownloadNotification notification, DownloadOptions options, ServerInformation& serverInformation)
    在 System.Deployment.Application.DownloadManager.DownloadDeploymentManifestBypass(SubscriptionStore subStore, Uri& sourceUri, TempFile& tempFile, SubscriptionState& subState, IDownloadNotification notification, DownloadOptions options)
    在 System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri, Boolean isShortcut)
    在 System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state)

    这只是诸多错误的一种

    通过网上搜索得知

    一般都是因为某种原因(如更新了一半网络中断)造成的程序文件损坏或者与注册表中的版本不一致所致
    通过删除
    C:\Documents and Settings\xxx\Local Settings\Apps\2.0
    文件夹,可以实现卸载,重新安装后正常

    但是因为程序升级频繁,这种解决方案太耗费精力

    希望在这里能够找到答案,如何能够保证所有的升级通过clickonce都能自动完成?

    按理说,应用程序升级未完成或者有什么问题clickonce应该可以自动回滚,或者再次升级重试的,为何必须通过删除部署文件夹来修复?而且我不能够写程序自动删除文件夹,因为删除文件夹后的安装操作不是全自动的,需要用户交互,我希望能够通过clickonce自动解决升级问题。
    我使用的是。net 2.0 部署在windows xp的机器上。暂时没有升级。net版本的可能。

    希望有相关经验的人能够协助分析解决,谢谢!

    2010年2月26日 1:19

答案

全部回复