Подобные сообщения, которые я уже видел, но на самом деле не решаю мою проблему:
Я пыталсячтобы спросить об этом на 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
содержит разные почтовые индексы, так как я по ошибке использовал разные почтовые индексы на старых и новых сертификатах (хотяЯ попросил службу поддержки использовать одни и те же данные везде, независимо от того, что я напечатал, так как я купил оба от одного поставщика). Этих двух различий не существует, когда я сравниваю две версии, использующие один и тот же сертификат.
Таким образом, мой вопрос можно сократить до двух вопросов:
- Определяет ли
publicKeyToken
идентификатор приложения, такой, что если они различны, то Windows будет рассматривать их как отдельные приложения (что объясняет, что здесь происходит)? - Используется ли атрибут
PostalCode
publisherIdentity
длясгенерировать publicKeyToken
(что объясняет, почему мои publicKeyTokens различаются)?
Если оба - да, по крайней мере, я буду знать, почему именно у меня возникла эта проблема, и я предполагаю, чтоНадеемся, что покупка нового сертификата с правильным почтовым индексом может решить эту проблему. Но я не хочу покупать еще один сертификат, просто чтобы посмотреть, исправит ли он это, поэтому мне интересно, имел ли кто-нибудь опыт с этим или какое-то понимание того, как работает этот аспект ClickOnce.