Главная страница
    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.013 c
2-1166899194
FIL-23
2006-12-23 21:39
2007.01.14
работа с записями в delphi


15-1165996538
zdm
2006-12-13 10:55
2007.01.14
OUTLOOK 2007


2-1166735707
Жир
2006-12-22 00:15
2007.01.14
???????? вместо надписей


15-1167024646
Gulnaz
2006-12-25 08:30
2007.01.14
Где можно найти учет пользователя Interbase?


15-1167052355
Handle
2006-12-25 16:12
2007.01.14
Handle





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский