Dzisiaj potrzebowałem funkcji do ustawienia instalowanej aplikacji w tryb uruchomienia jako administrator - oto ona:
export prototype BOOL SetRunAsAdmin(STRING, BOOL);
Parametry funkcji:
- szFile - nazwa pliku
- bLog - czy zapisywać do logu
function BOOL SetRunAsAdmin(szFile, bLog)
#define UKEYLAYERS "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers"
#define DATA "RUNASADMIN"
string szName, sKey;
LIST listSubKeys;
number nReturn;
int i;
begin
if (bLog) then WriteLog(0,"- Dodanie praw administratora do uruchomienia pliku: "+szFile); endif;
//Przestaw rejestr na 64 bity
if (SYSINFO.bIsWow64!=0) then REGDB_OPTIONS = REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY; endif;
szName = szFile;
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
if (!RegDBKeyExist(UKEYLAYERS)) then
if (bLog) then WriteLog(1," - brak klucza rejestru "+UKEY); endif;
if (SYSINFO.bIsWow64!=0) then REGDB_OPTIONS = REGDB_OPTIONS & ~REGDB_OPTION_WOW64_64KEY; endif;
return FALSE;
endif;
//Na istniejącym kluczu;
listSubKeys = ListCreate(STRINGLIST);
nReturn = RegDBQueryKey(UKEYLAYERS, REGDB_NAMES, listSubKeys );
if (nReturn=0) then
if (ListCount(listSubKeys)>0) then
ListSetIndex(listSubKeys,LISTFIRST);
for i=0 to ListCount(listSubKeys)-1
ListCurrentString ( listSubKeys, sKey );
if (sKey==szName) then
if (bLog) then WriteLog(1," - klucz ustawien już istnieje"); endif;
RegDBSetKeyValueEx(UKEYLAYERS, szName, REGDB_STRING, DATA, -1);
if (SYSINFO.bIsWow64!=0) then REGDB_OPTIONS = REGDB_OPTIONS & ~REGDB_OPTION_WOW64_64KEY; endif;
return TRUE;
endif;
ListSetIndex ( listSubKeys, LISTNEXT );
endfor;
endif;
endif;
//Stworz nowy
nReturn = RegDBSetKeyValueEx(UKEYLAYERS, szName, REGDB_STRING, DATA, -1);
if (nReturn==0) then
if (bLog) then WriteLog(1," - prawa administratora dodane"); endif;
if (SYSINFO.bIsWow64!=0) then REGDB_OPTIONS = REGDB_OPTIONS & ~REGDB_OPTION_WOW64_64KEY; endif;
return TRUE;
else
if (bLog) then WriteLog(1," - nie dodano praw administratora"); endif;
if (SYSINFO.bIsWow64!=0) then REGDB_OPTIONS = REGDB_OPTIONS & ~REGDB_OPTION_WOW64_64KEY; endif;
return FALSE;
endif;
end;
fajnie tu u Ciebie :)
OdpowiedzUsuń