ClickOnce отменяет наш исполняемый файл и говорит "Неизвестный издатель", - программирование
Подтвердить что ты не робот

ClickOnce отменяет наш исполняемый файл и говорит "Неизвестный издатель",

Мы разрабатываем приложение для развертывания через ClickOnce. У нас есть сертификат подписи кода VeriSign, который мы используем, чтобы подписать наше приложение (через signtool.exe post-build) и наши манифесты ClickOnce. В настоящее время у нас есть две проблемы, связанные с подписанием:

  • Мы подписываем наш .exe, используя наш сертификат. После создания нашего приложения мы видим, что он подписан (например, через "signtool verify/pa TheExecutable.exe" ). Но после установки приложения через ClickOnce, файл .exe больше не подписан.

  • Мы подписываем наши манифесты ClickOnce, используя наш сертификат. Но когда мы пытаемся установить приложение через ClickOnce, установщик ClickOnce говорит "Неизвестный издатель".

Проблема №1 всегда происходила. Проблема № 2 иногда загадочно исчезала, но она всегда возвращается вскоре после этого, и мы наблюдаем ее последовательно в течение нескольких недель.

Любые идеи?

4b9b3361

Ответ 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 &quot;My Company Name LLC&quot; /tr $(TsUrl) &quot;%(SignableFiles.Identity)&quot;" />
  </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, получилось ли это подписано?