Форум: "WinAPI";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
ВнизКак запустить программу от имени Администратора Найти похожие ветки
← →
vodvorezlaya (2006-08-29 09:43) [0]Народ подскажите, как из моей проги (сервис) запустить прогу от имени Администратора (пароль и пользователь извусны)?
Заранее спасибо.
← →
BiN © (2006-08-29 09:56) [1]LogonUser, CreateProcessAsUser
CreateProcessWithLogonW
← →
vodvorezlaya (2006-08-30 13:11) [2]Спасибо.
Получилось с CreateProcessWithLogonW.
Но я не пойму что дают функции LogonUser и CreateProcessAsUser.
Сначала логинишься LogonUser(работало) а потом создаешь процесс CreateProcessAsUser чтоли???
← →
Игорь Шевченко © (2006-08-30 13:28) [3]
> Но я не пойму что дают функции LogonUser
Первичный маркер дают, согласно описанию.
> Сначала логинишься LogonUser(работало) а потом создаешь
> процесс CreateProcessAsUser чтоли???
Можно CreateProcessWithTokenW - тоже помогает.
Основное отличие этой пары от CreateProcessWithLogonW в том, что не требуется наличие запущенной службы SecLogon
← →
BiN © (2006-08-30 13:42) [4]
> vodvorezlaya (30.08.06 13:11) [2]
>
> Спасибо.
> Получилось с CreateProcessWithLogonW.
>
> Но я не пойму что дают функции LogonUser и CreateProcessAsUser.
>
>
> Сначала логинишься LogonUser(работало) а потом создаешь
> процесс CreateProcessAsUser чтоли???
Также при создании интерактивного процесса CreateProcessAsUser может понадобиться самостоятельно устанавливать права доступа к рабочему столу, если таковой имеется.
← →
BiN © (2006-08-30 13:43) [5]
> BiN © (30.08.06 13:42) [4]
Также при создании интерактивного процесса с помощью CreateProcessAsUser может...
← →
vodvorezlaya (2006-09-01 09:43) [6]Народ, необходимо сделать запуск проги чтоб не вылезда её титульная страничка и сама прога пользуюсь 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.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c