在某台特定计算机上进行本地安装时,最新版本的 ClickOnce WPF 应用拒绝激活
简介:
我们有 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
。
观察:
- 部署到 TS3 的 A2 在为管理员用户本地下载和安装时 出现问题 (见下文)。
- 部署到 TS1 的 A2 在为管理员用户下载和安装到 TS3 时 出现完全相同的问题 。
- 部署到 TS1 的 A2 在为管理员用户本地下载和安装时完全没问题。
- 部署到 TS3 的 A2 在为管理员用户本地下载和安装到 TS1 或 TS2 时完全没问题。
- 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
让我找到了以下内容:
- answers.microsoft.com - 将 0x800736b3 标识为来自 <winerror.h> 的
- social.msdn.microsoft.com - 类似错误描述不详细,没有答案 - 没有用
- clickonce-the-referenced-assembly-is-not-installed-on-your-system - 但发布 [或构建] 过程没有任何变化,先决条件中列出了相同的文件,此外其他计算机上安装了相同的包
- system-runtime-interopservices-comexception-when-installing-github-for-windows - 可能是最好的建议,我已经知道了:清理 ClickOnce 缓存
ERROR_SXS_ASSEMBLY_NOT_FOUND
正如预期的那样,
rundll32 %SystemRoot%\system32\dfshim.dll CleanOnlineAppCache
删除了
C:\Users\Admin\AppData\Local\Apps\2.0
下的所有文件和大多数子文件夹。我随后重新启动了 TS3,但错误仍然出现。
mage.exe -cc
没有什么不同。
并行汇编
(
SxS,真是个宝贝!
) 暗示系统中存在某些问题,而不是应用程序,但
为什么以前从未发生过
,
为什么它会影响一个应用程序而不影响另一个应用程序?
我
很困惑
!有人有线索吗?我应该在哪里挖掘?
应该早点尝试一下,但是谁知道 m$ 的清理 CO 缓存的工具会如此失败?他们删除了文件,但留下了文件夹,这会以某种方式锁定后续尝试。
正如 @Nemo
在对已接受答案的评论
中提到的那样,“手动删除
%USERPROFILE%\Local Settings\Apps\2.0
内的所有文件夹
的方法有效”。
在我的情况下,它是
%USERPROFILE%\AppData\Local\Apps\2.0
。
不需要删除整个
\2.0
文件夹,这是 @Erdem 在
他的答案
中所建议的。
是的,无论哪种方式 清理 ClickOnce 缓存都会删除所有 CO应用程序 - 针对此用户 。
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 应用可能会在您首次尝试运行它们时进行安装/更新,但这通常不会给用户带来很大的不便。