Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.014 c
2-1167012893
impuls
2006-12-25 05:14
2007.01.14
Операция сдвига


2-1166647179
antonn
2006-12-20 23:39
2007.01.14
По стопам создания ярлыков... (*.lnk)


3-1161965081
Ag@nt
2006-10-27 20:04
2007.01.14
Posgre+C++


15-1166608604
boriskb
2006-12-20 12:56
2007.01.14
Как правильно задавать вопрос на форуме


2-1166798943
КВАНТ
2006-12-22 17:49
2007.01.14
Про шрифты Windows XP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский