Главная страница
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.075 c
2-1271530750
[true]TRIx
2010-04-17 22:59
2010.08.27
массив pointer, обратиться к ячейке


15-1267410604
Юрий
2010-03-01 05:30
2010.08.27
С днем рождения ! 1 марта 2010 понедельник


2-1271311609
Den
2010-04-15 10:06
2010.08.27
InstallShield диалоги


15-1264596540
dars73
2010-01-27 15:49
2010.08.27
SQL Возможно ли?


15-1274808723
Lyonux
2010-05-25 21:32
2010.08.27
Работа сайта