Обновление приложения ClickOnce новым сертификатом заставляет Windows думать, что это другое приложение - PullRequest
0 голосов
/ 07 ноября 2019

Подобные сообщения, которые я уже видел, но на самом деле не решаю мою проблему:

Я пыталсячтобы спросить об этом на Microsoft , но получил только то, что казалось автоматическим ответом, поэтому я попробую свою удачу здесь.

Почти год назад я приобрел сертификат, который я использовал для подписи моего развернутого приложения WinForms ClickOnce. Поскольку срок его действия истекает, я приобрел новый, используя те же данные, что и раньше (хотя я случайно использовал другой почтовый индекс; я упомяну об этом еще раз ниже). Я использую тестовую веб-папку для тестирования публикации со старым сертификатом, а затем публикую обновление с использованием нового сертификата, чтобы увидеть, как будет работать пользователь. Согласно этой статье , если я использую VS 2010 и .NET 4.0, пользователи должны получить обновление в обычном режиме. Я использую VS 2017 и .NET 4.6.2, поэтому я думаю, что это также должно относиться к моему делу.

За исключением того, что при публикации обновления я получаю следующее предупреждение:

Приложение подписано ключом, отличным от существующего приложения на сервере. Вы хотите перезаписать его?

Если я все равно опубликую его, я не вижу никаких сообщений об обновлении на компьютере, на котором установлен продукт, и если я вручную загружаю и устанавливаю новую версию,он устанавливает его рядом со старым со знаком «- 1», добавленным к названию продукта. Я думаю, что происходит, когда вы устанавливаете два отдельных приложения ClickOnce с одинаковыми именами. Поэтому Windows считает, что это другое приложение, а не обновление существующего.

Я открыл как старый, так и новый сгенерированный файл манифеста (MyApplication.exe.manifest) и заметил, что publicKeyToken отличается от assemblyIdentity element:

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

vs

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

Кроме того, элемент publisherIdentity содержит разные почтовые индексы, так как я по ошибке использовал разные почтовые индексы на старых и новых сертификатах (хотяЯ попросил службу поддержки использовать одни и те же данные везде, независимо от того, что я напечатал, так как я купил оба от одного поставщика). Этих двух различий не существует, когда я сравниваю две версии, использующие один и тот же сертификат.

Таким образом, мой вопрос можно сократить до двух вопросов:

  1. Определяет ли publicKeyTokenидентификатор приложения, такой, что если они различны, то Windows будет рассматривать их как отдельные приложения (что объясняет, что здесь происходит)?
  2. Используется ли атрибут PostalCode publisherIdentity длясгенерировать publicKeyToken (что объясняет, почему мои publicKeyTokens различаются)?

Если оба - да, по крайней мере, я буду знать, почему именно у меня возникла эта проблема, и я предполагаю, чтоНадеемся, что покупка нового сертификата с правильным почтовым индексом может решить эту проблему. Но я не хочу покупать еще один сертификат, просто чтобы посмотреть, исправит ли он это, поэтому мне интересно, имел ли кто-нибудь опыт с этим или какое-то понимание того, как работает этот аспект ClickOnce.

...