Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как запустить программу от имени Администратора [D7, WinXP]


vodvorezlaya ©   (2006-08-29 09:43:00) 

Народ подскажите, как из моей проги (сервис) запустить прогу от имени Администратора (пароль и пользователь извусны)?

Заранее спасибо.


vodvorezlaya   (2006-09-01 09:43:00) [1]

Народ, необходимо сделать запуск проги чтоб не вылезда её титульная страничка и сама прога пользуюсь CreateProcessWithLogonW.

If (FindWindow(nil, 'ReGet Deluxe 4.0 - Bios.wjr' )=0) or (FindWindow(nil, 'ReGet Deluxe 4.0 - default.wjr' )=0)
then begin
  si.cb := SizeOf(tstartupinfo);
  si.dwFlags  := STARTF_USESHOWWINDOW;
  si.wShowWindow := SW_SHOWDEFAULT;// - SW_HIDE не помогает!
  si.lpReserved := nil;
  si.lpDesktop := nil;
  si.lpTitle := nil;
  CreateProcessWithLogonW('Администратор', nil, 'пароль', 0, nil,'C:\Program Files\ReGetDx\regetdx.exe' ,0, nil, nil, si, pif);
end;

Потом ставлю эту прогу в автозагрузку и при старте то глючит ReGetDx то вообще потом не запускается. Что это может быть?

Вот полный код:

unit Unit1;

interface

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

function CreateProcessWithLogonW(user:pwidechar; domain:pwidechar;
passw:pwidechar; flags: DWORD; lpApplicationName: PwideChar; lpCommandLine: PwideChar;
 dwCreationFlags: DWORD; lpEnvironment: Pointer;
 lpCurrentDirectory: PWideChar; const lpStartupInfo: TStartupInfo;
 var lpProcessInformation: TProcessInformation): BOOL; stdcall;external 'advapi32.dll' name 'CreateProcessWithLogonW';

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Timer1: TTimer;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
 private

 public

 end;

var
 Form1: TForm1;

implementation

uses ShellApi;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   si: TSTARTUPINFO;
   pif: PROCESS_INFORMATION;
begin

If (FindWindow(nil, 'ReGet Deluxe 4.0 - Bios.wjr' )=0) or (FindWindow(nil, 'ReGet Deluxe 4.0 - default.wjr' )=0)
then begin
  si.cb := SizeOf(tstartupinfo);
  si.dwFlags  := STARTF_USESHOWWINDOW;
  si.wShowWindow := SW_SHOWDEFAULT;
  si.lpReserved := nil;
  si.lpDesktop := nil;
  si.lpTitle := nil;
  CreateProcessWithLogonW('Администратор', nil, 'pass', 0, nil,'C:\Program Files\ReGetDx\regetdx.exe' ,0, nil, nil, si, pif);
end;

if FindWindow(nil, 'ReGet Deluxe 4.0 - Bios.wjr' )<>0 then
ShowWindow(FindWindow(nil, 'ReGet Deluxe 4.0 - Bios.wjr' ), SW_HIDE);

if FindWindow(nil, 'ReGet Deluxe 4.0 - default.wjr' )<>0 then
ShowWindow(FindWindow(nil, 'ReGet Deluxe 4.0 - default.wjr' ), SW_HIDE);

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if FindWindow(nil, 'ReGet Deluxe 4.0 - Bios.wjr' )<>0 then
ShowWindow(FindWindow(nil, 'ReGet Deluxe 4.0 - Bios.wjr' ), SW_Show);

if FindWindow(nil, 'ReGet Deluxe 4.0 - default.wjr' )<>0 then
ShowWindow(FindWindow(nil, 'ReGet Deluxe 4.0 - default.wjr' ), SW_Show);

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Button1Click(Sender);
end;

end.


BiN   (2006-08-30 13:43:00) [2]


> BiN ©   (30.08.06 13:42) [4]


Также при создании интерактивного процесса с помощьюCreateProcessAsUser может...


BiN   (2006-08-30 13:42:00) [3]


> vodvorezlaya   (30.08.06 13:11) [2]
>
> Спасибо.
> Получилось с CreateProcessWithLogonW.
>
> Но я не пойму что дают функции LogonUser и CreateProcessAsUser.
>
>
> Сначала логинишься LogonUser(работало) а потом создаешь
> процесс CreateProcessAsUser чтоли???


Также при создании интерактивного процесса CreateProcessAsUser может понадобиться самостоятельно устанавливать права доступа к рабочему столу, если таковой имеется.


Игорь Шевченко   (2006-08-30 13:28:00) [4]


> Но я не пойму что дают функции LogonUser


Первичный маркер дают, согласно описанию.


> Сначала логинишься LogonUser(работало) а потом создаешь
> процесс CreateProcessAsUser чтоли???


Можно CreateProcessWithTokenW - тоже помогает.

Основное отличие этой пары от CreateProcessWithLogonW в том, что не требуется наличие запущенной службы SecLogon


vodvorezlaya   (2006-08-30 13:11:00) [5]

Спасибо.
Получилось с CreateProcessWithLogonW.

Но я не пойму что дают функции LogonUser и CreateProcessAsUser.

Сначала логинишься LogonUser(работало) а потом создаешь процесс CreateProcessAsUser чтоли???


BiN   (2006-08-29 09:56:00) [6]

LogonUser, CreateProcessAsUser
CreateProcessWithLogonW


Наверх

Титульная страница Поиск, карта сайта Написать письмо