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

Автоматизация запуска программ: обход UAC в Windows Vista с использованием Delphi и Pascal

Delphi , ОС и Железо , Windows

Windows Vista ввела механизм контроля учетных записей пользователей (UAC), который требует подтверждения для выполнения действий, требующих повышенных привилегий. Это касается и запуска программ, которые пытаются выполнить операции, требующие администраторских прав. Однако в некоторых случаях может потребоваться автоматизировать запуск таких программ без вмешательства пользователя.

Проблема

Разработчик столкнулся с проблемой, при которой первая программа на Delphi вызывает вторую через ShellExecuteEx(), и в зависимости от учетных данных пользователя, система запрашивает подтверждение для запуска второй программы. Это происходит даже если первая программа запущена от имени администратора.

Решение

Для решения этой проблемы можно использовать несколько подходов:

  1. Запуск первой программы с повышенными привилегиями, что позволит второй программе выполняться без запроса UAC.
  2. Добавление манифеста ко второй программе, указывающего системе, что она не требует администраторских прав.

Запуск с повышенными привилегиями

Чтобы запустить первую программу с администраторскими правами, необходимо добавить манифест, который явно указывает на это. Пример манифеста для первой программы (First.exe.manifest):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <!-- Vista UAC Support -->
  <ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
    <ms_asmv2:security>
      <ms_asmv2:requestedPrivileges>
        <ms_asmv2:requestedExecutionLevel level="requireAdministrator" />
      </ms_asmv2:requestedPrivileges>
    </ms_asmv2:security>
  </ms_asmv2:trustInfo>
</assembly>

Добавление манифеста ко второй программе

Для второй программы можно использовать манифест, который указывает системе выполнять её с правами текущего пользователя (asInvoker):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <!-- Vista UAC Support -->
  <ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
    <ms_asmv2:security>
      <ms_asmv2:requestedPrivileges>
        <ms_asmv2:requestedExecutionLevel level="asInvoker" />
      </ms_asmv2:requestedPrivileges>
    </ms_asmv2:security>
  </ms_asmv2:trustInfo>
</assembly>

Сохраните этот манифест как Second.exe.manifest и убедитесь, что он включен в ресурсы вашей второй программы.

Важные замечания

  • Убедитесь, что ваша вторая программа действительно не требует администраторских прав для выполнения своих задач.
  • Если в имени файла второй программы присутствуют подозрительные суффиксы (например, "setup" или "install"), это может вызвать автоматический запрос на администраторские права со стороны UAC.
  • Использование уровня highestAvailable не является надежным решением и не рекомендуется.

Подтвержденный ответ

Для автоматизации запуска программ без вмешательства пользователя необходимо либо запускать первую программу с администраторскими правами, либо настроить манифест второй программы так, чтобы она выполнялась с правами текущего пользователя.

Альтернативный ответ

Не всегда возможно полностью обойти UAC, так как это может представлять угрозу безопасности. Важно тщательно оценить, действительно ли вашей программе требуются администраторские права для выполнения задач.

Примеры кода на Object Pascal

Пример кода для запуска процесса с администраторскими правами на Object Pascal:

uses
  ShellApi;

function RunElevated(const AppPath, Args: string): Boolean;
var
  SEInfo: TShellExecuteInfo;
begin
  with SEInfo do
  begin
    cbSize := SizeOf(TShellExecuteInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_NO_UI;
    lpFile := PChar(AppPath);
    lpParameters := PChar(Args);
    nShow := SW_HIDE;
    lpVerb := 'runas';
  end;
  Result := ShellExecuteEx(@SEInfo) <> 0;
end;

Используйте эту функцию для запуска первой программы с администраторскими правами, передав ей путь к исполняемому файлу и аргументы.

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

'Автоматизация запуска программ в Windows Vista с обходом UAC с использованием Delphi и Pascal.'


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

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




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


:: Главная :: Windows ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 12:04:49/0.0036890506744385/0