Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.14;
Скачать: CL | DM;

Вниз

Как запустить программу от имени Администратора   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2007.01.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.059 c
15-1166603244
alexandr
2006-12-20 11:27
2007.01.14
подскажите компонент


3-1162187801
vlgrig1961
2006-10-30 08:56
2007.01.14
Есть ли в SQL для парадокса что-то вроде To_Char конверт из цифр


15-1167038965
click
2006-12-25 12:29
2007.01.14
Font.Size < 8


15-1165853702
ProgRAMmer Dimonych
2006-12-11 19:15
2007.01.14
Вопрос, наверное, не новый...


2-1166708201
RomanH
2006-12-21 16:36
2007.01.14
Сортировка в JvDBGrid