Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用新证书更新ClickOnce应用程序使Windows认为这是一个不同的应用程序_C#_Winforms_Visual Studio 2017_Clickonce_.net 4.6.2 - Fatal编程技术网

C# 使用新证书更新ClickOnce应用程序使Windows认为这是一个不同的应用程序

C# 使用新证书更新ClickOnce应用程序使Windows认为这是一个不同的应用程序,c#,winforms,visual-studio-2017,clickonce,.net-4.6.2,C#,Winforms,Visual Studio 2017,Clickonce,.net 4.6.2,我已经看到过类似的帖子,但没有真正解决我的问题: -用户得到一个我没有得到的错误 -我不能更新我的证书,因为它不是测试证书 -这篇文章非常接近,但答案并不能解决我的问题,可能是因为上面提到的这篇文章已经有9年的历史了,并且针对的是不同版本的.NET 我试着问这个问题,但只得到了似乎是自动的回答,所以我会在这里试试我的运气 我在大约一年前购买了一个证书,我一直使用它来签署ClickOnce部署的WinForms应用程序。由于它即将过期,我购买了一个新的,使用的数据与以前相同(尽管我无意中使用了

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

  • -用户得到一个我没有得到的错误
  • -我不能更新我的证书,因为它不是测试证书
  • -这篇文章非常接近,但答案并不能解决我的问题,可能是因为上面提到的这篇文章已经有9年的历史了,并且针对的是不同版本的.NET
我试着问这个问题,但只得到了似乎是自动的回答,所以我会在这里试试我的运气

我在大约一年前购买了一个证书,我一直使用它来签署ClickOnce部署的WinForms应用程序。由于它即将过期,我购买了一个新的,使用的数据与以前相同(尽管我无意中使用了不同的邮政编码;我将在下面再次提及)。我正在使用一个测试web位置测试使用旧证书发布,然后使用新证书发布更新,以查看用户体验。根据,如果我使用VS2010和.NET4.0,用户应该可以正常获得更新。我使用VS2017和.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" />

vs


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

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

  • publicKeyToken
    是否确定了应用程序的身份,如果它们不同,Windows会将它们视为单独的应用程序(这将解释此处发生的情况)
  • publisherIdentity
    PostalCode
    属性是否用于生成
    publicKeyToken
    (这可以解释为什么我的publicKeyToken不同)

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

    我还没有读过所有这些,但标题似乎很有希望:@Flydog57是的,我看到了,但在这里似乎不起作用。我在我的帖子中也提到过。哦,公钥令牌只是与用于签名程序集的私钥相关联的公钥的缩写版本。查看@ericlippert对此问题的回答,了解更多信息:。你的邮政编码一点也不涉及。而且。。。您是否询问过您购买证书的CA是否可以续订您的初始证书(而不是获得一个全新的证书)。一个简单的搜索结果是:,在我看来,至少有一个CA会根据同一个密钥向你颁发一个新证书(有新的日期),pairI没有阅读所有这些,但标题似乎很有希望:@Flydog57是的,我看到了,但在这里似乎不起作用。我在我的帖子中也提到过。哦,公钥令牌只是与用于签名程序集的私钥相关联的公钥的缩写版本。查看@ericlippert对此问题的回答,了解更多信息:。你的邮政编码一点也不涉及。而且。。。您是否询问过您购买证书的CA是否可以续订您的初始证书(而不是获得一个全新的证书)。一个简单的搜索结果是:,在我看来,至少有一个CA会根据相同的密钥对向您颁发新证书(带有新日期)
    <asmv1:assemblyIdentity name="MyApplication.exe" version="1.2.3.4" publicKeyToken="6fec920a5f1bbb2b" language="neutral" processorArchitecture="amd64" type="win32" />