Условие ClickOnce: ошибка: опубликованный установщик может быть поврежден

Мы создали специальный пакет установки для установки некоторых шрифтов на клиентском компьютере и развернули его в папке предварительных требований вC:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\FontsInstaller, Все хорошо, если ссылаться на него в качестве обязательного условия в Visual Studio 2010, и я могу опубликовать приложение без проблем.

С другой стороны, клиент получает ошибку во время проверки хэша:

Проверка хеша файла

Ошибка: программа установки обнаружила, что файлC: \ Users \ RMORAN ~ 1 \ AppData \ Local \ Temp \ VSD4684.tmp \ FontsInstaller \ fontsinstaller.msi» либо изменился с момента его первоначального опубликования, либо может быть поврежден.

Я попытался включить хеш и исключить его с помощью Bootstrapper Manifest Generator, и я всегда получаю один и тот же результат на клиенте. Файл немедленно удаляется (по соображениям безопасности), как только он не проходит проверку хеша.

Сейчас я'мы нашлиОтчет об ошибке Microsoft Connect говоря:»

У меня есть пользовательский пакет начальной загрузки, установленный в качестве предварительного условия для моего приложения. Когда я собираю это в системе, в которой установлена Visual Studio 2012, установка завершается с ошибкой:

Программа установки обнаружила, что файл...» либо изменился с момента первоначального опубликования, либо может быть поврежден.

Я строю в Visual Studio 2010, без изменений в пакете или проектах. Когда Visual Studio 2012 не установлен, это работает как ожидалось. "

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

Кто-нибудь еще сталкивался с этой проблемой, если так, нашли ли вы обходной путь, кроме отсутствия установленного VS2012?

 giammin09 июл. 2013 г., 13:23
Та же проблема! после установки vs2012 мои пользовательские пакеты начальной загрузки не отображаютсяне хочу устанавливать с clickonce. Вы решили?

Ответы на вопрос(3)

чтобы посмотреть на задачу MSBuild генерации загрузчика (на машине с установленным .NET 4.5) и обнаружил, что она дополняетproduct.xml файла элементы. В частности, он пытается вычислить открытый ключ из каждого файла. Если он может найти его, он сравнивает ключ со значениемPublicKey приписывать. Если значения отличаются, он выдает предупреждение, но в обоих случаях он сохраняет только что вычисленное значение.

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

Вы можете подтвердить эти выводы, извлекаяSETUPCFG ресурс из полученногоsetup.exe; Это'текстовая версия слиянияproduct.xml файлы.

Во всяком случае, помните, как я сказал, что он вычисляет хэш SHA256 файлов, если он не может найти открытый ключ? Документация для <PackageFiles> Элемент (Bootstrapper) говоритзначениеHash атрибут должен быть хешем SHA1.

Я не смог проверить, какой из SHA1 или SHA256 в результатеsetup.exe использует для проверки значенияHash атрибут (этонеуправляемый код, и я не могнайти символы для него), но позвольте записи показать, что аналогичный взгляд на версию .NET 4.0 генератора загрузчика MSBuild показывает, что он действительно использует алгоритм SHA1 для вычисления значенияHash атрибут, поэтому с помощью дедукции мы можем сказать,setup.bin (по крайней мере один из Windows SDK v7.0A) использует SHA1. Я'Я уверен, что я пытался использоватьsetup.bin из Windows SDK v8.0A и я получил те же (неправильные) результаты. (Это можно подтвердить, скопировавsetup.bin с SDK v8.0A на компьютер, на котором установлена только платформа .NET 4.0.setup.exe может установить пользовательский пакет начальной загрузки, используя проверку на основе хеша)

Так что еслипроверка на основе хеша сломана в загрузчике установкимы можем по крайней мере использовать проверку открытого ключа (на основе сертификата). Хорошая новость заключается в том, что генератор загрузчика автоматически начнет использовать этот механизм, если сможет извлечь сертификат ».Открытый ключ из файла пакета. Плохая новость в том, что это означаеткаждый файл пакета должен быть подписанsigntool.exe и действительный сертификат подписи кода (не у всех может быть сертификат для подписи кода, хотя еслиделать один раз, когда вы могли бы ...).

После того, как я подписал файлы пакета, используемые нашим пользовательским загрузчиком, я перестал получать ошибки установки во время выполнения, когда создавал проект на машине с установленной версией .NET 4.5, при этом все еще создавая допустимый загрузчик, когда использовал машину, которая не У меня установлена .NET 4.5.

tl; dr: Подпишите файлы пакета с помощью сертификата для подписи кода, чтобы избежать дефекта, представленного в .NET 4.5.

 PUG13 мар. 2013 г., 18:09
Я подписал пакетный файл(.msi) с тем же сертификатом, который я использую, чтобы подписать приложение «один раз». Он был успешно подписан. Затем создал для него манифест начальной загрузки. Я все еще получаю ошибкуfile XYZ.msi changed since it was initially published or may be corrupt В журнале я вижу, что ошибка происходит сразу послеVerifying file hash, Начальная загрузка приложения работала отлично, прежде чем я установил.net 4 при установкеVS2012, Есть идеи?
 Olivier Dagenais19 мар. 2013 г., 20:39
@jaminator: это не такЗвучит так, будто ваш сертификат является доверенным сертификатом для подписи кода. В подписанном вами файле: щелкните правой кнопкой мыши> Свойства> Цифровые подписи> Подробности> Посмотреть сертификат> Путь сертификации. Все ли доверено и исходит от широко распространенного доверенного корня?
 PUG14 мар. 2013 г., 22:08
Да, его подтвердили, что он работает только на системах, где я иду вMemory Management Console и добавить сертификат вручную
 Brian Sutherland13 мая 2016 г., 18:17
Да, новый setup.bin из v8.1A или новее будет правильно использовать хеш SHA256, но на момент вопроса это нене существует.
 PUG14 мар. 2013 г., 21:58
Итак, я установил все обновления Windows на моемwin 7 машина и сделал манифест с тем же подписанным пакетом и ошибка изменилась наWinVerifyTrust returned -2146762487 File not trusted Error: Setup has detected that the publisher of file cannot be verified. Эта ошибка появляется только на компьютере, мой сертификат, с которым я подписал пакет не установлен. Но я не могу обойтись без установки этого сертификата на 200 машин
 Pradeep26 июн. 2013 г., 14:02
Я была такая же проблема. Работало на машине .Net 4.0. Но, не удалось на .NET 4.5 машина.
 ToddK23 янв. 2015 г., 16:36
Сегодня я обнаружил (vs2013), что для проверки хеша он ищет SHA256. когда я запускал msbuild с хэшами SHA1, он выдавал эту ошибку: предупреждение msb3165: значение 'хэш» Атрибут не совпадает с атрибутом файла. Я использовал эту программу командной строкиsecurityxploded.com/download-file.php?id=9801 , Я'Я не связан с этим, я просто погуглил, чтобы найти что-то, что будет.

C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bootstrapper

в

C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ Bootstrapper

и скопируйте MSI-пакеты (которые вы хотите использовать) из C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bootstrapper в C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ загрузчик

GenerateBootstrapper Path от:

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper

в

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\Bootstrapper

Ваш ответ на вопрос