![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как запустить программу от имени Администратора [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