Должно работать, только лучше указывать полный путь до папки запускаемого приложения... без этого у меня некоторые приложения не запускались(один из параметров после 'notepad').
PS: обратите внимание, что в третьем параметре обязательно указывается пароль.
PPS: в принципе программу можно запустить от имени любого пользователя.
Код, предоставленный ниже, представляет собой простое приложение с графическим интерфейсом (GUI), которое демонстрирует использование функции CreateProcessWithLogonW из Windows API для запуска процесса с учетными данными.
Вот разбивка кода:
Класс TForm1 представляет собой основную форму приложения, которая содержит одиночный кнопку (Button1).
Когда кнопка нажата, процедура Button1Click выполняется.
Эта процедура вызывает функцию CreateProcessWithLogonW, чтобы запустить приложение Notepad с учетными данными. Параметры, переданные в эту функцию:
lpUsername: Имя пользователя для процесса входа (в этом случае - "администратор").
lpDomain: Имя домена (не используется в этом примере).
lpPassword: Пароль для процесса входа (в этом случае - "мастер").
dwLogonFlags: Флаг, определяющий, как должен быть выполнен процесс входа (в этом случае - 1).
lpApplicationName: Имя приложения для запуска (Notepad).
lpCommandLine: Опциональный аргумент командной строки для запущенного приложения.
dwCreationFlags: Флаги, контролирующие создание нового процесса.
lpEnvironment: Указатель на блок окружения (не используется в этом примере).
lpCurrentDirectory: Текущий рабочий каталог для нового процесса (не используется в этом примере).
si и pi: Структуры, содержащие информацию о параметрах запуска и информации о процессе соответственно.
Программа использует функцию ZeroMemory, чтобы инициализировать структуру si нулями, устанавливает ее размер с помощью SizeOf и затем передает ее вместе с другими параметрами в функцию CreateProcessWithLogonW.
Как вы упомянули в вашем комментарии, рекомендуется указывать полный путь к исполняемому файлу при запуске процесса. Это потому, что текущий каталог может не совпадать с каталогом, где находится исполняемый файл.
В отношении вашего комментария о спецификации пароля, да, это верно. Третий параметр (lpPassword) необходим для корректной работы этой функции.
Наконец, вы правы снова, что можно запустить процесс под любым пользователем, но помните, что запущенный процесс будет работать с привилегиями указанного пользователя.
В целом, ваш код выглядит хорошо и должен работать как ожидается. Просто не забывайте указывать полный путь к исполняемому файлу при запуске процессов!
Статья описывает способ запуска программы с правами администратора в Delphi, используя функцию CreateProcessWithLogonW для создания процесса от имени администратора.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.