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

Вниз

CreateProcess и права пользователя   Найти похожие ветки 

 
Nilman ©   (2010-02-24 13:51) [0]

Была вот такая функция которая успешно работала в XP:

procedure RunAndWait(Command: string);
var
 SI: _STARTUPINFO;
 PI: _PROCESS_INFORMATION;
begin
 FillChar(SI, sizeof(SI), #0);
 SI.cb:=sizeof(SI);
 FillChar(PI, sizeof(PI), #0);
 CreateProcess(nil,PChar(Command),nil,nil,false,0,nil,nil,SI,PI);
 WaitForSingleObject(PI.hProcess,INFINITE);
end;


Использовалась она для silent запуска инсталятора InstallAware. Проблема в системах с UAC. Инсталлятор запускать нужно с правами админа, при запуске из explorer появляется запрос на повышение прав, total commander который сам работает по обычным юзером, тоже выдаёт сообщение о том что нужно повышение прав для запуска, а вот как научить мою программу спрашивать повышение прав, пока не знаю.. Помогите пож кто сталкивался с проблемой..


 
12 ©   (2010-02-24 14:03) [1]

а try except не ловит ничего?


 
Игорь Шевченко ©   (2010-02-24 14:15) [2]


> Была вот такая функция которая успешно работала в XP


Плохая была функция, коды возвратов не анализировала. Исправь


 
12 ©   (2010-02-24 14:26) [3]

сам искал как-то, но уже не могу проверить
мы успешно все даунгрейдили (по другим обстоятельствам)
http://www.interface.ru/home.asp?artId=21156


> Игорь Шевченко ©

т.е. можно жить с UAC нормально?
имею ввиду, если корректно писать.
а то неприятно утром увидеть на экране вопрос, висевший всю ночь, и понять что ничего собственно и не делалось


 
Nilman ©   (2010-02-25 10:36) [4]

ну собсно проблема решена с помощью недокументированного значения lpVerb "runas". если кому интересно, вот код который получился:

procedure RunAndWait(Command: string);
var
 ShellExecuteInfoW: PShellExecuteInfoW;
begin
 try
   GetMem(ShellExecuteInfoW, SizeOf(TShellExecuteInfoW));
   ShellExecuteInfoW^.cbSize:=SizeOf(TShellExecuteInfoW);
   ShellExecuteInfoW^.fMask:=0;
   ShellExecuteInfoW^.lpVerb:="runas";
   ShellExecuteInfoW^.lpFile:=PChar(Command);
   ShellExecuteInfoW^.lpParameters:="";
   ShellExecuteInfoW^.lpDirectory:=PChar(ExtractFilePath(Command));

   ShellExecuteEx(ShellExecuteInfoW);
   WaitForSingleObject(ShellExecuteInfoW.hProcess,INFINITE);
 finally
   FreeMem(ShellExecuteInfoW);
 end;
end;

спасибо всем!



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.05 c
4-1236247314
kalexi
2009-03-05 13:01
2010.08.27
Как определить какую область занимает процесс в памяти.


15-1274473788
Юрий
2010-05-22 00:29
2010.08.27
С днем рождения ! 22 мая 2010 суббота


2-1270804414
droidron
2010-04-09 13:13
2010.08.27
Mozzilla handle


11-1221313480
DJ Vusal
2008-09-13 17:44
2010.08.27
Проблема OLE обращений из Delphi в Excel


15-1270050200
Faiwer
2010-03-31 19:43
2010.08.27
ООБД