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

Адаптация Delphi-приложений для публикации в Windows Store: тонкости отключения обновлений и работы с Desktop Bridge

Delphi , Рабочий стол , Рабочий стол

Для публикации приложения, написанного на Delphi, в Windows Store, необходимо соблюдать определённые правила, в том числе и отключать внутренние механизмы обновлений. Согласно политике магазина, такие функции, как "Проверка обновлений", запрещены. В рамках подготовки к публикации, разработчики сталкиваются с необходимостью адаптации кода под требования Универсальной платформы Windows (UWP).

В ходе работы над проектом была найдена C#-функция IsRunningAsUwp(), которая помогает определить, запущено ли приложение в контексте UWP. Планировалось перенести эту функцию в Delphi, однако при попытке выполнения кода в проекте, конвертированном с помощью Desktop Bridge, строка packageFullName оставалась пустой.

Проблема

При попытке использовать функцию GetCurrentPackageFullName для определения запуска приложения в контексте UWP, строка PackageName оставалась пустой, что не позволяло корректно определить, запущено ли приложение в магазине Windows.

Решение

После анализа кода было выявлено, что функция GetCurrentPackageFullName была объявлена неверно. Правильный вариант объявления функции выглядит следующим образом:

function GetCurrentPackageFullName(
    out Len: Cardinal;
    Name: PWideChar
): Integer; stdcall; external kernel32 delayed;

Вызов функции должен осуществляться следующим образом:

var
  Len: Cardinal;
  Name: string;
  ErrorCode: Integer;
begin
  Len := 0;
  ErrorCode := GetCurrentPackageFullName(Len, nil);
  if ErrorCode <> ERROR_INSUFFICIENT_BUFFER then
    RaiseLastOSError(ErrorCode);
  SetLength(Name, Len-1);
  ErrorCode := GetCurrentPackageFullName(Len, PChar(Name));
  if ErrorCode <> ERROR_SUCCESS then
    RaiseLastOSError(ErrorCode);
end;

Важно отметить, что в исходном C# коде присутствуют ошибки, которые не были воспроизведены в перенесённой версии на Delphi.

Пример кода

function RunningAsUwp: Boolean;
var
  Len, ErrorCode: DWORD;
  PackageName: string;
begin
  Len := 0;
  ErrorCode := GetCurrentPackageFullName(Len, nil);
  if ErrorCode <> ERROR_INSUFFICIENT_BUFFER then
    RaiseLastOSError(ErrorCode);
  SetLength(PackageName, Len);
  ErrorCode := GetCurrentPackageFullName(Len, @PackageName[1]);
  if ErrorCode <> ERROR_SUCCESS then
    RaiseLastOSError(ErrorCode);
  Result := ErrorCode <> APPMODEL_ERROR_NO_PACKAGE;
end;

Замечания

Первый вызов функции GetCurrentPackageFullName всегда возвращает код 122 (ERROR_INSUFFICIENT_BUFFER), что является ожидаемым поведением для корректного определения необходимого размера буфера. После корректировки кода проблема была решена.

Выводы

Разработчикам, работающим с публикацией Delphi-приложений в Windows Store, важно внимательно отнестись к деталям работы с UWP и Desktop Bridge, а также корректно адаптировать код для соответствия требованиям магазина. Приведённый пример кода демонстрирует, как можно исправить ошибку с пустой строкой PackageName и обеспечить корректную работу функции определения запуска приложения в магазине Windows.

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

В процессе адаптации Delphi-приложений для публикации в Windows Store, разработчики сталкиваются с необходимостью тонкой настройки отключения механизмов обновлений и работы с Desktop Bridge для соответствия требованиям магазина.


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

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




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


:: Главная :: Рабочий стол ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 20:06:21/0.0037009716033936/0