开发者问题收集

在某台特定计算机上进行本地安装时,最新版本的 ClickOnce WPF 应用拒绝激活

2023-03-02
454

简介:
我们有 3 个相关的测试服务器:
名称 操作系统 版本 .NET CLR
TS1 Win7 Pro SP1 6.1.7601.65536 4.5.51209 4.0.30319.34209
TS2 Wsrv2008r2 SP1 6.1.7601.65536 4.8.03761 4.0.30319.42000
TS3 W11 Pro (22H2) 10.0.22621.0 4.8.09032 4.0.30319.42000

我们的应用套件由 Win 服务和交互式应用组成。后者作为 ClickOnce 包部署到 IIS。
测试从应用服务器开始,下载 CO 应用并在本地安装(升级以前的版本)。

我们将两个 CO WPF 应用命名为 A B ,后面跟着 1 (以前的版本)或 2 (最新版本)。
版本 2 对 A 和 B 的更改仅涉及 UI 行为。引用和依赖项未受影响,项目未编辑,没有新文件,没有删除。构建过程始终相同(通过脚本)。 A 和 B 本质上相似,并且引用相同的库,但有 1 个例外:A 使用 System.DirectoryServices.AccountManagement

观察:

  1. 部署到 TS3 的 A2 在为管理员用户本地下载和安装时 出现问题 (见下文)。
  2. 部署到 TS1 的 A2 在为管理员用户下载和安装到 TS3 时 出现完全相同的问题
  3. 部署到 TS1 的 A2 在为管理员用户本地下载和安装时完全没问题。
  4. 部署到 TS3 的 A2 在为管理员用户本地下载和安装到 TS1 或 TS2 时完全没问题。
  5. B1 和 B2 可以以任何方式下载和安装 - 从测试服务器到任何服务器

A2 在 TS3 上激活阶段失败(见下文), 但仅限于TS3 。B2 在任何测试机器上都运行正常。
在询问用户是否应安装来自未知发布者的应用程序 之前 ,发生了故障(我们使用由 VisualStudio 生成的自签名测试证书来签署 ClickOnce 部署):

PLATFORM VERSION INFO
    Windows             : 10.0.22621.0 (Win32NT)
    Common Language Runtime     : 4.0.30319.42000
    System.Deployment.dll       : 4.8.9032.0 built by: NET481REL1
    clr.dll             : 4.8.9139.0 built by: NET481REL1LAST_B
    dfdll.dll           : 4.8.9032.0 built by: NET481REL1
    dfshim.dll          : 10.0.22621.30000 (WinBuild.160101.0800)

SOURCES
    Deployment url          : http://desktop-vtq5f2f/AppAch/client/AppAcw.application

ERROR SUMMARY
    Below is a summary of the errors, details of these errors are listed later in the log.
    * Activation of http://desktop-vtq5f2f/AppAch/client/AppAcw.application resulted in exception. Following failure messages were detected:
        + The referenced assembly is not installed on your system. (Exception from HRESULT: 0x800736B3)

COMPONENT STORE TRANSACTION FAILURE SUMMARY
    No transaction error was detected.

WARNINGS
    There were no warnings during this operation.

OPERATION PROGRESS STATUS
    * [3/1/2023 12:39:54 PM] : Activation of http://desktop-vtq5f2f/AppAch/client/AppAcw.application has started.

ERROR DETAILS
    Following errors were detected during this operation.
    * [3/1/2023 12:40:03 PM] System.Runtime.InteropServices.COMException
        - The referenced assembly is not installed on your system. (Exception from HRESULT: 0x800736B3)
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Internal.Isolation.IStore.GetAssemblyInformation(UInt32 Flags, IDefinitionIdentity DefinitionIdentity, Guid& riid)
            at System.Deployment.Internal.Isolation.Store.GetAssemblyManifest(UInt32 Flags, IDefinitionIdentity DefinitionIdentity)
            at System.Deployment.Application.ComponentStore.GetAssemblyManifestFromStore(DefinitionIdentity asmId)
            at System.Deployment.Application.ComponentStore.GetAssemblyManifestWithRetry(DefinitionIdentity asmId, TimeSpan retryInterval, Int32 maxRetryCount)
            at System.Deployment.Application.ComponentStore.GetSubscriptionStateInternal(DefinitionIdentity subId)
            at System.Deployment.Application.SubscriptionStore.GetSubscriptionStateInternal(SubscriptionState subState)
            at System.Deployment.Application.SubscriptionStore.CheckAndReferenceApplication(SubscriptionState subState, DefinitionAppId appId, Int64 transactionId)
            at System.Deployment.Application.DownloadManager.DownloadDeploymentManifestDirectBypass(SubscriptionStore subStore, Uri& sourceUri, TempFile& tempFile, SubscriptionState& subState, IDownloadNotification notification, DownloadOptions options, ServerInformation& serverInformation)
            at System.Deployment.Application.DownloadManager.DownloadDeploymentManifestBypass(SubscriptionStore subStore, Uri& sourceUri, TempFile& tempFile, SubscriptionState& subState, IDownloadNotification notification, DownloadOptions options)
            at System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl, Uri& deploymentUri)
            at System.Deployment.Application.ApplicationActivator.PerformDeploymentActivationWithRetry(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl)
--- End of stack trace from previous location where exception was thrown ---
            at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
            at System.Deployment.Application.ApplicationActivator.PerformDeploymentActivationWithRetry(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl)
            at System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state)

COMPONENT STORE TRANSACTION DETAILS
    No transaction information is available.

合乎逻辑的结论是: TS3 出了问题,对吧?但是 什么 我该如何解决

我在 TS3 上搜索了 System.DirectoryServices.AccountManagement.dll

C:\Windows\Microsoft.NET>dir /s System.DirectoryServices.AccountManagement.dll
Directory of C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.DirectoryServices.AccountManagement\v4.0_4.0.0.0__b77a5c561934e089
  05/06/2022  22:20  System.DirectoryServices.AccountManagement.dll  290,720 bytes
Directory of C:\Windows\Microsoft.NET\Framework\v4.0.30319
  05/06/2022  22:20  System.DirectoryServices.AccountManagement.dll  290,720 bytes
Directory of C:\Windows\Microsoft.NET\Framework64\v4.0.30319
  05/06/2022  22:20  System.DirectoryServices.AccountManagement.dll  290,720 bytes

A1 下载并安装正常。 A2,通过文件夹复制到 TS3,运行没有任何问题
我的结论是:TS3 上引用的库没有缺少任何东西,所以问题一定出在安装上。

看在微软的份上, 为什么从日志中省略有问题的文件的名称?! 这会很有帮助!
Windows 事件日志没有我多次尝试的任何痕迹,所以它没有用。

搜索类似错误:
谷歌搜索 +System.Runtime.InteropServices.COMException 0x800736B3 让我找到了以下内容:

正如预期的那样, rundll32 %SystemRoot%\system32\dfshim.dll CleanOnlineAppCache 删除了 C:\Users\Admin\AppData\Local\Apps\2.0 下的所有文件和大多数子文件夹。我随后重新启动了 TS3,但错误仍然出现。
mage.exe -cc 没有什么不同。

并行汇编 ( SxS,真是个宝贝! ) 暗示系统中存在某些问题,而不是应用程序,但 为什么以前从未发生过 为什么它会影响一个应用程序而不影响另一个应用程序?
很困惑 !有人有线索吗?我应该在哪里挖掘?

2个回答

应该早点尝试一下,但是谁知道 m$ 的清理 CO 缓存的工具会如此失败?他们删除了文件,但留下了文件夹,这会以某种方式锁定后续尝试。

正如 @Nemo 在对已接受答案的评论 中提到的那样,“手动删除 %USERPROFILE%\Local Settings\Apps\2.0 内的所有文件夹 的方法有效”。
在我的情况下,它是 %USERPROFILE%\AppData\Local\Apps\2.0

不需要删除整个 \2.0 文件夹,这是 @Erdem 在 他的答案 中所建议的。

是的,无论哪种方式 清理 ClickOnce 缓存都会删除所有 CO应用程序 - 针对此用户

Astrogator
2023-03-03
1) Rename C:\Users\{UserName}\AppData\Local\Apps\2.0 to
   C:\Users\{UserName}\AppData\Local\Apps\2.0A

2) Install the ClickOnce app as a new install - this will create
   a new C:\Users\{UserName}\AppData\Local\Apps\2.0

3) Copy all folders from C:\Users\{UserName}\AppData\Local\Apps\2.0
   to C:\Users\{UserName}\AppData\Local\Apps\2.0A

4) Rename C:\Users\{UserName}\AppData\Local\Apps\2.0
   to C:\Users\{UserName}\AppData\Local\Apps\2.0B

5) Rename C:\Users\{UserName}\AppData\Local\Apps\2.0A
   to C:\Users\{UserName}\AppData\Local\Apps\2.0

新应用应安装并运行。您现有的 ClickOnce 应用可能会在您首次尝试运行它们时进行安装/更新,但这通常不会给用户带来很大的不便。

B H
2024-04-04