-
Есть нужда запихать в HKCL ветку, но нет возможности сделать это в семерке без прав администратора. В-общем, не могу понять, как сделать локальное повышение прав для возможности ключа в реестр, чтобы высветилось окошко UAC.
-
Мужичёк, ты бы, если не затруднит, расшифровал бы нам (или мне) неучам, что означает ветка HKCL
-
Ну ошибся, с кем не бывает? HKCR - HKEY_CLASSES_ROOT
-
uses ShellAPI;
procedure TForm1.Button1Click(Sender: TObject);
var
ShellExecuteInfo: TShellExecuteInfo;
begin
Hide;
ShellExecuteInfo.cbSize:= SizeOf(TShellExecuteInfo);
ShellExecuteInfo.fMask:= 0;
ShellExecuteInfo.Wnd:= 0;
ShellExecuteInfo.lpVerb:= 'runas';
ShellExecuteInfo.lpFile:= PAnsiChar(Application.ExeName);
ShellExecuteInfo.lpParameters:= nil;
ShellExecuteInfo.lpDirectory:= nil;
ShellExecuteInfo.nShow:= SW_SHOWNORMAL;
if ShellExecuteEx(@ShellExecuteInfo) then
Close;
Show;
end;
-
а без закрытия проги никак? т.е. чтобы права только на текущую операцию повышались. в инете есть от боженко метод с ком объектом и длл, но както не хочется с этим связываться.
или можно как нибудь простую длл подцепить с такими правами?
-
> Gu (22.01.11 21:09) [4] > > а без закрытия проги никак?
Так не закрывай, кто тебя заставляет
Запускаешь второй экземпляр программы с параметрами или любой другой свой exe
ShellExecuteInfo.lpParameters:= 'bla bla bla';
procedure TForm1.FormCreate(Sender: TObject); begin Application.ShowMainForm:= False; GetCommandLine - разбираем эти самые параметры, если bla bla bla что то делаем и закрываем программу Close end;
-
Не, нужно без закрытия программы. На крайняк можно написать манифест, но хотелось бы без подтверждения прав при каждом запуске, даже если права администратора по сути не понадобятся.
-
манифест сразу права запросит на всю сессию проги, проще тогда галку в свойствах проги ставить "запускать от админа". вариант с параметрами интересный, но было бы гораздо удобней, чтобы при проведении операции окно само вылазило, в случае необходимости. т.е. допустим копируем под уак в корень диска ц файлик, при начале копирования окошко бы вылезло о повышении прав. в манифесте же есть параметр asInvoker, но он не срабатывает, если манифест прикручиваешь. может ошибся где?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="GuFn" processorArchitecture="*"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker"/> </requestedPrivileges> </security> </trustInfo> </assembly>
-
вот если вот этот прикрутить, то права админа запрашиваются при старте, но это не гуд, пользователь без прав не сможет запустить
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="GuFn" version="0.1.0.0" processorArchitecture="*"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly>
-
> в манифесте же есть параметр asInvoker, но он не срабатывает
"asInvoker" говорит системе, что надо наследовать права запустившего приложения. Параметров "Запросить когда надо" для манифеста нет, по крайней мере документированных.
-
А вот Far Manager новый вроде так и делает - когда у него прав не хватает файлик записать, он их запрашивает. Сорцы вроде открытые.
|