Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2023, 18:36   #1
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
Вопрос Запуск программы от имени администратора

Здравствуйте,

Подскажите, можно ли программно запустить сторонний исполняемый файл, скрипт от имени администратора??

Человек имеет учётку простого юзверя, к примеру есть программа, если нажать пкм по ехе файлу и выбрать "Запустить от имени Администратора", то появится окно с требованием ввести логин и пароль пользователя, имеющего права и привилегии администратора. Как сделать чтобы это окно не появлялось, а скармливать системе заранее заданные в программе логин и пароль, домен и т.д?

Само собой имя пользователя (администратора), пароль, домен известны.
cybernewbie вне форума Ответить с цитированием
Старый 25.04.2023, 19:19   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

https://learn.microsoft.com/en-us/wi...cesswithlogonw
и подобные
p51x вне форума Ответить с цитированием
Старый 25.04.2023, 19:38   #3
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Странно, я пробовал это, но не получилось... Пытался на диск С:, писать лог пинга... Но нифига не получалось... Пробовал это давно уже...
Т.е. с помощью программы, лог не писался, а с помощью пкм всё ок.

Сейчас ещё раз попробую.
cybernewbie вне форума Ответить с цитированием
Старый 26.04.2023, 13:10   #4
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Не получается что то, запускаю командную строку, вбиваю например запись лога пинга на диск С:.
Код:
ping yandex.ru -t >c:\ping_yandex.txt
Пишет Отказано в доступе.

Если запускать через ПКМ командную строку, то всё ок.

Вот код:
Код:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls, Buttons;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
   Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

const
    LOGON_WITH_PROFILE  = $00000001;
    LOGON_NETCREDENTIALS_ONLY  = $00000002;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function CreateProcessWithLogonW
                               (
                                 lpUsername, // user"s name
                                 lpDomain, // user"s domain
                                 lpPassword: PWideChar; // user"s password
                                 dwLogonFlags: DWORD; // logon option
                                 lpApplicationName: PWideChar; // executable module name
                                 lpCommandLine: PWideChar; // command-line string
                                 dwCreationFlags: DWORD; // creation flags
                                 lpEnvironment: Pointer; // new environment block
                                 lpCurrentDirectory: PWideChar; // current directory name
                                 const lpStartupInfo: TStartupInfo; // startup information
                                 var lpProcessInformation: TProcessInformation //process inf
                                ): Bool; stdcall;external 'advapi32.dll';

procedure TForm1.Button1Click(Sender: TObject);

var
  UserName,
  UserDomain,
  Password,
  CmdLine:Pwidechar;
  si: TStartupInfo;
  ProcInfo: TProcessInformation;

begin
 FillChar(si,sizeof(si), 0);
 si.cb:=sizeof(si);
 GetMem(UserName, 512);
 GetMem(UserDomain, 512);
 GetMem(Password, 512);
 GetMem(CmdLine, 512);
 try
   UserName:=StringToWideChar(Edit1.Text,UserName,512);
   UserDomain:=StringToWideChar(Edit2.Text,UserDomain,512);
   Password:=StringToWideChar(Edit3.Text,Password,512);
   cmdline:=StringToWideChar(Edit4.Text,cmdline,512);
   if not CreateProcessWithLogonW(
                                   UserName,
                                   UserDomain,
                                   Password,
                                   LOGON_WITH_PROFILE,
                                   nil,
                                   CmdLine,
                                   CREATE_DEFAULT_ERROR_MODE,
                                   //CREATE_NEW_CONSOLE or CREATE_NEW_PROCESS_GROUP,
                                   nil, nil, si, ProcInfo) then
   begin
      MessageDlg(SysErrorMessage(GetLastError)+#10#13+inttostr(GetLastError), mtError, [mbOK], 0);
   end else
   begin
     WaitForSingleObject(procinfo.hProcess, INFINITE);
     CloseHandle(procinfo.hProcess);
     CloseHandle(procinfo.hThread);
     ShowMessage('Success !!!');
   end;
 finally
   FreeMem(UserName, 512);
   FreeMem(UserDomain, 512);
   FreeMem(Password, 512);
   FreeMem(CmdLine, 512);
 end;
end;


end.
cybernewbie вне форума Ответить с цитированием
Старый 26.04.2023, 13:47   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

И что же написано в Edit4.Text?
macomics вне форума Ответить с цитированием
Старый 26.04.2023, 14:16   #6
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
И что же написано в Edit4.Text?
Код:
C:\Windows\system32\cmd.exe
cybernewbie вне форума Ответить с цитированием
Старый 26.04.2023, 14:23   #7
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Командная строка открывается, но команды требующие права Администратора не выполняются.
При ПКМ всё ок.
cybernewbie вне форума Ответить с цитированием
Старый 26.04.2023, 14:38   #8
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Так введите в Edit4 следующее 'cmd.exe /k "ping -t ya.ru"'
Для того, чтобы можно было использовать переадресацию потоков, надо либо команду записать в bat/cmd файл, чтобы она обрабатывалась cmd.exe, либо обрабатывать самостоятельно. Для самостоятельно обработки надо создать pipe'ы для трёх стандартных потоков ввода вывода и читать два pipe'а и записывать прочитанное в файл, а в pipe ввода записывать информацию при необходимости её наличия (программа требует ввод каких-либо данных).

Чтобы все это реализовать, надо заполнить структуру STARTUPINFO и передать её в предпоследнем параметре функции CreateProcessWithLogonW
Изображения
Тип файла: jpg Screenshot_20230426_151655.jpg (96.3 Кб, 3 просмотров)

Последний раз редактировалось macomics; 26.04.2023 в 15:18.
macomics вне форума Ответить с цитированием
Старый 26.04.2023, 15:18   #9
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Для того, чтобы можно было использовать переадресацию потоков, надо либо команду записать в bat/cmd файл, чтобы она обрабатывалась cmd.exe
Попробовал команду:
Код:
ping yandex.ru -t >c:\ping_yandex.txt
сохранить в файл .cmd, запускаю через программу, и ничего нет, окно командной строки даже не открывается..., но если запустить через пкм, то пинг записывается в файл, какие есть мысли?
cybernewbie вне форума Ответить с цитированием
Старый 26.04.2023, 15:31   #10
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Я предполагаю что процесс запускается без прав админа, и собственно любая программа запустится также без прав админа, т.е. запускается только от имени указанного пользователя, но без его прав.
Изображения
Тип файла: jpg Screenshot_20230426_151655.jpg (96.7 Кб, 26 просмотров)
Тип файла: jpg Screenshot1.jpg (49.4 Кб, 0 просмотров)
cybernewbie вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск приложения от имени администратора UKRtortik Общие вопросы Delphi 21 05.07.2014 03:48
запуск процессов от имени администратора D][mon C# (си шарп) 0 14.01.2012 23:12
Запуск программы от имени администратора не зная пароль digital-stream Операционные системы общие вопросы 0 21.11.2011 22:02
Запуск от имени администратора DEV C++ Илларион Общие вопросы C/C++ 2 29.08.2011 06:55
Запуск функции от имени администратора s@ngre Win Api 4 12.04.2011 16:55