ClickOnce отменяет наш исполняемый файл и говорит "Неизвестный издатель",
Мы разрабатываем приложение для развертывания через ClickOnce. У нас есть сертификат подписи кода VeriSign, который мы используем, чтобы подписать наше приложение (через signtool.exe
post-build) и наши манифесты ClickOnce. В настоящее время у нас есть две проблемы, связанные с подписанием:
-
Мы подписываем наш .exe, используя наш сертификат. После создания нашего приложения мы видим, что он подписан (например, через "signtool verify/pa TheExecutable.exe" ). Но после установки приложения через ClickOnce, файл .exe больше не подписан.
-
Мы подписываем наши манифесты ClickOnce, используя наш сертификат. Но когда мы пытаемся установить приложение через ClickOnce, установщик ClickOnce говорит "Неизвестный издатель".
Проблема №1 всегда происходила. Проблема № 2 иногда загадочно исчезала, но она всегда возвращается вскоре после этого, и мы наблюдаем ее последовательно в течение нескольких недель.
Любые идеи?
Ответы
Ответ 1
Хорошо, решил тайну для 1/2 этого вопроса: ClickOnce принимает манифест приложения из bin
, но принимает фактический EXE из obj
. Чтобы распространить подписанный exe, , вы должны подписать файл в каталоге obj
.
EDIT: Здесь другая половина. Установка .NET 4.5 Beta прерывает подпись/проверку ClickOnce, даже в VS2010.
Ответ 2
Вот как я обрабатываю подписание манифеста и подписываю exe. Я добавляю это в конец моего .csproj файла (отредактируйте его в текстовом редакторе).
<Target Name="AfterBuild">
<CallTarget Targets="SignOutput" />
</Target>
<Target Name="SignOutput">
<PropertyGroup>
<TsUrl>http://timestamp.comodoca.com/rfc3161</TsUrl>
</PropertyGroup>
<ItemGroup>
<SignableFiles Include="$(ProjectDir)obj\$(ConfigurationName)\myappname.exe" />
</ItemGroup>
<Exec Command="signtool.exe sign /n "My Company Name LLC" /tr $(TsUrl) "%(SignableFiles.Identity)"" />
</Target>
Ответ 3
Я буду честен с тобой, Пол. Я никогда не был в восторге от ClickOnce. Набор инструментов никогда не казался зрелым, кроме как с ручной публикации/развертывания. Запуск материала через MSBuild никогда не был хорошим опытом, и Mage.exe всегда, кажется, имеет проблемы для меня. В большинстве случаев мои проблемы не совпадали с номером версии.
Тем не менее, я думаю, что наши самые большие проблемы были связаны с попыткой управлять вещами через пользовательский интерфейс настроек в Visual Studio. Мне было полезно попытаться немного полагаться на "магию" MSBuild и передать необходимые параметры в MSBuild и сделать немного больше контроля внутри файла csproj.
Я не знаю, как выглядит ваша установка сборки, но для нас мы Jenkins запустили Rake файл, который вызывает MSBuild в решении. Это позволяет нам отправлять определенные параметры в MSBuild из файла Rake.
В частности, мы вводим значения для ApplicationVersion
, ApplicationRevision
, MinimumRequiredVersion
и OutDir
. Что касается вещей, которые нужно соблюдать в самой csproj, вы должны убедиться, что установлены ManifestCertificateThumbprint
, ManifestKeyFile
, GenerateManifests
и SignManifests
. Мы также устанавливаем цель построения по умолчанию Publish
, но я не уверен, что все это релевантно.
Я не могу говорить о том, почему ClickOnce будет "отменять подписку" на ваш исполняемый файл, за исключением того, что исполняемый файл, который вы подписываете, может и не быть тем, который, по вашему мнению, упаковывается в пакет ClickOnce. Другими словами, это может быть создание нового исполняемого файла и выброс в пакет, а не тот, который вы уже подписали. Я думаю, что мне нужно будет узнать немного больше о вашей настройке, чтобы наверняка сделать этот звонок.
Что бы стоило, если бы я мог сделать это снова, я бы не поместил свои яйца в корзину ClickOnce. Это действительно отличный опыт для тех, кто работает в Internet Explorer, или если вы установили плагин для Chrome. Это больше работает, но я в настоящее время работаю над решением, которое имитирует историю обновлений Chrome. У них есть пакет ClickOnce для пользователей Internet Explorer, но он действительно используется только для загрузки пакета установщика Windows, который устанавливает Chrome.exe и Update.exe. Они подробно описывают техническую документацию для Omaha (иначе известный как Google Update).
Ответ 4
Проблема с подписанием setup.exe самостоятельно. Я столкнулся с этим при написании статей ClickOnce для ребят P & P в MSFT. Для этого нет обходного пути.
Установлен ли ваш сертификат в хранилище сертификатов для учетной записи пользователя, которую вы используете для создания развертывания? Является ли он указан как файл в самом VS-решении? Если это значение по умолчанию, и вы создаете развертывание с помощью msbuild и mage, получилось ли это подписано?