首页 > 解决方案 > 使用新证书更新 ClickOnce 应用程序使 Windows 认为这是一个不同的应用程序

问题描述

我已经看过但并没有真正解决我的问题的类似帖子:

我试图在Microsoft上问这个问题,但只得到了似乎是自动回复的信息,所以我会在这里试试运气。

大约一年前,我购买了一个证书,我一直用它来签署我的 ClickOnce 部署的 WinForms 应用程序。由于它即将到期,我使用与以前相同的数据购买了一个新的(尽管我不小心使用了不同的邮政编码;我将在下面再次提到这一点)。我正在使用测试 Web 位置来测试使用旧证书的发布,然后使用新证书发布更新以查看用户体验。根据这篇文章,如果我使用的是 VS 2010 和 .NET 4.0,用户应该可以正常获取更新。我使用 VS 2017 和 .NET 4.6.2,所以我想这也应该适用于我的情况。

除了当我发布更新时,我收到以下警告:

该应用程序使用与服务器上现有应用程序不同的密钥进行签名。你想覆盖它吗?

如果我仍然发布它,我在安装产品的机器上看不到任何更新提示,如果我手动下载并安装新版本,它会与旧版本并排安装,并带有“- 1" 附加到产品名称后。我认为当您安装两个具有相同名称的独立 ClickOnce 应用程序时会发生这种情况。所以 Windows 认为这是一个不同的应用程序,而不是对现有应用程序的更新。

我打开了新旧生成的清单文件 ( MyApplication.exe.manifest) 并注意到元素的publicKeyToken不同之处:assemblyIdentity

<asmv1:assemblyIdentity name="MyApplication.exe" version="1.2.3.4" publicKeyToken="44de2eab9d920cfd" language="neutral" processorArchitecture="amd64" type="win32" />

对比

<asmv1:assemblyIdentity name="MyApplication.exe" version="1.2.3.4" publicKeyToken="6fec920a5f1bbb2b" language="neutral" processorArchitecture="amd64" type="win32" />

此外,该publisherIdentity元素包含不同的邮政编码,因为我错误地在旧证书和新证书上使用了不同的邮政编码(尽管我确实要求支持人员在任何地方使用相同的数据,无论我输入什么,因为我都是从同一个供应商处购买的)。当我比较使用相同证书的两个版本时,这两个差异不存在。

所以我的问题可以简化为两个问题:

  1. 是否publicKeyToken确定应用程序的身份,如果它们不同,那么 Windows 会将它们视为单独的应用程序(这将解释这里发生的事情)?
  2. 是用于生成的PostalCode属性(这可以解释为什么我的 publicKeyTokens 不同)?publisherIdentitypublicKeyToken

如果两者都是肯定的,那么至少我会知道我到底为什么会遇到这个问题,我猜希望购买具有正确邮政编码的新证书可以解决它。但是我不想购买另一个证书只是为了看看是否可以修复它,所以我想知道是否有人对此有一些经验或对 ClickOnce 这方面的工作原理有所了解。

标签: c#winformsvisual-studio-2017clickonce.net-4.6.2

解决方案


推荐阅读