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

Как обновить имя приложения в манифесте при изменении названия исполняемого файла в Delphi

Delphi , Файловая система , Ресурсы

При разработке программ на Delphi иногда возникает необходимость запросить повышенные привилегии для запуска приложения. Для этого используется манифест, который добавляется в ресурсы проекта. В манифесте указывается имя приложения, которое должно быть уникальным и не зависеть от имени исполняемого файла, так как пользователь может его изменить. В этой статье мы рассмотрим, как обновить имя приложения в манифесте, если пользователь изменил название исполняемого файла.

Проблема

При добавлении манифеста в качестве ресурса в проект на Delphi, пользователь столкнулся с проблемой обновления имени приложения в манифесте, если исполняемый файл был переименован. Манифест содержит XML-файл, в котором указано имя приложения, и пользователю необходимо узнать, как обновить это имя в манифесте, хранящемся в ресурсах, без перекомпиляции всего проекта.

Решение

Обновление манифеста в уже скомпилированном исполняемом файле не представляется возможным, так как файл будет заблокирован в процессе выполнения программы. Однако, есть альтернативный подход:

  1. Использование внешнего манифеста: Вместо встраивания манифеста в исполняемый файл, можно использовать внешний манифест в виде отдельного XML-файла. Например, если у вас есть исполняемый файл Contoso.exe, рядом должен быть файл Contoso.exe.manifest.

  2. Обновление манифеста при изменении названия: Если пользователь переименовывает Contoso.exe в Frobber.exe, ему необходимо также переименовать соответствующий манифест в Frobber.exe.manifest. Это можно автоматизировать или предусмотреть инструкцию для пользователя.

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

Пример кода

Для демонстрации, как можно создать манифест динамически, приведем пример кода на Object Pascal:

program CreateManifestFile;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  System.Classes;

var
  ManifestContent: string;
begin
  // Создаем содержимое манифеста
  ManifestContent := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'#10;
  ManifestContent := ManifestContent + '<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">'#10;
  ManifestContent := ManifestContent + '  <assemblyIdentity version="1.0.0.0"'#10;
  ManifestContent := ManifestContent + '    processorArchitecture="x86"'#10;
  ManifestContent := ManifestContent + '    name="' + ParamStr(0) + '"'#10;
  ManifestContent := ManifestContent + '    type="win32"/>'#10;
  ManifestContent := ManifestContent + '  <description>Elevate execution level</description>'#10;
  ManifestContent := ManifestContent + '  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">'#10;
  ManifestContent := ManifestContent + '    <security>'#10;
  ManifestContent := ManifestContent + '      <requestedPrivileges>'#10;
  ManifestContent := ManifestContent + '        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>'#10;
  ManifestContent := ManifestContent + '      </requestedPrivileges>'#10;
  ManifestContent := ManifestContent + '    </security>'#10;
  ManifestContent := ManifestContent + '  </trustInfo>'#10;
  ManifestContent := ManifestContent + '</assembly>'#10;

  // Получаем путь к исполняемому файлу
  var FileName: string;
  FileName := ChangeFileExt(ParamStr(0), '.manifest');

  // Создаем файл манифеста
  var ManifestFile: TFileStream;
  ManifestFile := TFileStream.Create(FileName, fmCreate or fmOpenWrite or fmShareDenyNone);
  try
    ManifestFile.Write(ManifestContent[1], Length(ManifestContent));
  finally
    ManifestFile.Free;
  end;
end.

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

Вывод

Использование внешнего манифеста и его обновление или создание динамически является наиболее практичным решением для обновления имени приложения в манифесте при изменении названия исполняемого файла в Delphi.

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

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


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

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




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


:: Главная :: Ресурсы ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 10:54:45/0.0036399364471436/0