Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Почему SignTool не может подписать MSIX пакет, созданный в Delphi или Pascal?

Delphi , Технологии , ActiveX

 

В мире разработки приложений для Windows, упаковка в формат MSIX становится все более популярной. Этот формат предлагает современные возможности развертывания и обновления, но процесс подписи пакетов иногда может вызывать затруднения. В частности, пользователи Delphi и Pascal могут столкнуться с ситуацией, когда стандартный инструмент SignTool отказывается подписывать MSIX пакет, созданный в среде разработки.

Проблема:

Как показывает пример из обсуждения, ошибка при подписи MSIX пакета с помощью SignTool может выглядеть так:

SignTool Error: This file format cannot be signed because it is not recognized.

Или, в другом варианте:

SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147024885/0x8007000b)

При этом, подпись обычных исполняемых файлов (.exe) проходит успешно, и сам процесс создания MSIX пакета (например, с помощью makeappx) не вызывает проблем.

Решение, предложенное в обсуждении:

В приведенном обсуждении, автор смог решить проблему, используя сторонний инструмент под названием MSIX Hero (https://github.com/marcinotorowski/MSIX-Hero). Этот инструмент успешно подписал тестовый MSIX пакет, что позволило продолжить работу.

Альтернативные решения и возможные причины:

Хотя MSIX Hero и помог в конкретном случае, существуют и другие возможные причины и решения проблемы, связанные с подписью MSIX пакетов:

  1. Версия SignTool: Убедитесь, что вы используете последнюю версию SignTool из Windows SDK. Разные версии могут иметь различную поддержку форматов и алгоритмов. Как видно из обсуждения, использование более старой версии SignTool приводило к другой ошибке.

  2. Некорректные параметры SignTool: Проверьте правильность параметров, передаваемых SignTool. Особенно важны параметры, определяющие алгоритм хеширования (/fd SHA256 или /fd SHA1), алгоритм подписи (/a для автоматического выбора лучшего сертификата) и сервер меток времени (/tr для добавления метки времени, что рекомендуется для долгосрочной валидности подписи). Пример команды:

    "C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe" sign /v /a /fd SHA256 /tr "http://timestamp.digicert.com" /td SHA256 "YourApp.msix"

    Замените "YourApp.msix" на имя вашего MSIX пакета, а "http://timestamp.digicert.com" на подходящий сервер меток времени (например, "https://time.certum.pl" для Certum).

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

  4. Неправильная структура MSIX пакета: Хотя автор утверждает, что AppManifest.xml в порядке, стоит еще раз тщательно проверить его на соответствие схеме MSIX. Неправильные атрибуты или отсутствующие элементы могут приводить к проблемам при подписи.

  5. Антивирусное ПО: В редких случаях, антивирусное программное обеспечение может блокировать процесс подписи. Попробуйте временно отключить антивирус и повторить попытку.

  6. Альтернативные инструменты подписи: Помимо MSIX Hero, существуют и другие инструменты для подписи MSIX пакетов, например, Signotaur (упомянут в обсуждении). Они могут предложить более удобный интерфейс или поддержку специфических типов сертификатов (например, хранящихся на токенах).

Пример кода на Delphi (Object Pascal):

Хотя Delphi не предоставляет встроенных средств для подписи MSIX пакетов, вы можете использовать функции ShellExecute или CreateProcess для вызова SignTool из вашего приложения. Пример:

uses
  System.Diagnostics;

procedure SignMsixPackage(const MsixFilePath, CertificateSubjectName: string);
var
  StartInfo: TProcessStartInfo;
  Process: TProcess;
  ExitCode: Integer;
begin
  StartInfo := TProcessStartInfo.Create;
  try
    StartInfo.FileName := '"C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe"'; // Укажите правильный путь к SignTool
    StartInfo.Arguments := Format('sign /v /a /fd SHA256 /tr "http://timestamp.digicert.com" /td SHA256 "%s"', [MsixFilePath]);
    StartInfo.UseShellExecute := False;
    StartInfo.RedirectStandardOutput := True;
    StartInfo.RedirectStandardError := True;
    StartInfo.CreateNoWindow := True;

    Process := TProcess.Create(nil);
    try
      Process.StartInfo := StartInfo;
      Process.Start;
      Process.WaitForExit;
      ExitCode := Process.ExitCode;

      // Вывод результатов подписи (для отладки)
      Memo1.Lines.Add(Process.StandardOutput.ReadToEnd);
      Memo1.Lines.Add(Process.StandardError.ReadToEnd);

      if ExitCode <> 0 then
        ShowMessage('Ошибка при подписи MSIX пакета. Код ошибки: ' + IntToStr(ExitCode));
    finally
      Process.Free;
    end;
  finally
    StartInfo.Free;
  end;
end;

// Пример использования:
procedure TForm1.Button1Click(Sender: TObject);
begin
  SignMsixPackage('C:\Path\To\Your\App.msix', 'Your Certificate Subject Name'); // Замените на ваши значения
end;

Важно: Этот код требует указания правильного пути к SignTool и имени субъекта сертификата. Также, необходима обработка ошибок и вывод результатов подписи для отладки.

Заключение:

Подпись MSIX пакетов может быть сложной задачей, но, разобравшись с возможными причинами и решениями, можно успешно автоматизировать этот процесс в ваших проектах на Delphi и Pascal. Использование сторонних инструментов, таких как MSIX Hero, может упростить задачу, но важно понимать основы работы с SignTool и сертификатами для решения проблем, которые могут возникнуть.

Создано по материалам из источника по ссылке.

В контексте описывается проблема, когда SignTool не может подписать MSIX пакет, созданный в Delphi или Pascal, и предлагаются решения, включая использование стороннего инструмента MSIX Hero и проверку различных параметров SignTool, сертификата и структур


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: ActiveX ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-15 23:12:19/0.0060610771179199/1