Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.256 c