Jump to content

Systemvariabler i registret


Recommended Posts

Jag försöker förbättra mina installers för de registerhack som kräver ett litet script, för att fungera (se "Starta om Utforskaren" som exempel).

För att undvika elevation, vill jag nu placera filerna i användarprofilen, istället för nuvarande C:\root. Problemet är då att körkommandot i registret inte verkar fungera med systemvariabler... så länge jag använder absoluta sökvägar fungerar det, men det är ju oanvändbart i en allmän installer.

INF-filen jag använder för att skapa installern ser ut som följer, och problemet är alltså kommandot under [Add.Context3]. Jag har provat systemvariablerna %AppData% och %UserProfile%... inget fungerar, utom absolut sökväg. Någon som kan hjälpa mig runt detta?

[version]
signature="$Windows NT$"


[DefaultInstall]
CopyFiles=Context.Files3
AddReg=Add.Context1,Add.Context2,Add.Context3


[DestinationDirs]
Context.Files3=53,AppData/Roaming/Context/RestartExplorer

[Context.Files3]
restartexplorer.bat
uninstall3.reg

[Add.Context1]
HKCU,Software\Classes\Directory\Background\shell\restartexplorer,HasLUAShield,0x00000000

[Add.Context2]
HKCU,Software\Classes\Directory\Background\shell\restartexplorer,MUIVerb,0x00000000,Starta om Utforskaren

[Add.Context3]
HKCU,Software\Classes\Directory\Background\shell\restartexplorer\command,,0x00000000,%AppData%\Context\RestartExplorer\restartexplorer.bat

Link to comment
Share on other sites

Nu fattar jag inte riktigt vad du menar, men både %AppData% (som leder direkt till Roaming) och %UserProfile% är testat utan framgång.

Faktum är att jag inte lyckas med några systemvariabler överhuvudtaget... endast absolut sökväg fungerar. Jag behöver alltså ett annat sätt att anropa "restartexplorer.bat".

Link to comment
Share on other sites

Guest opensource

Windows register är bara en databas. Det är upp till programmen som läser datan hur den ska tolkas och eventuellt utvärderas. Om programmet i fråga inte utvärderar systemvariabler utan direkt använder strängen är det inte något att göra åt saken.

Du kan göra ett script som skapar en registerfil med redan utvärderade systemvariabler:

echo %AppData% >> filnamn

Ovanstående utvärderar systemvariabeln och skriver ut resultatet i slutet av filen.

Link to comment
Share on other sites

Tack, men nu blev det för avancerat för mig, jag är inte programmerare. Det hela var bara ett försök att undvika förhöjda rättigheter vid installationen av ett simpelt högerklickskommando, i utforskaren. Jag får väl bara acceptera att jag går bet på det. :(

Link to comment
Share on other sites

Registret må vara bara en databas, men än löjligare om det inte skulle kunna gå att lösa problemet.

Utgår från "elevation" - popup rutan från UAC.

Skulle gissa på delar av detta har skärpts upp i hur enkelt det kan administreras ur säkerhetsynpunkt.

Bl.a har man ju försvårat möjligheterna för användare i att starta program & körningar via genvägar som laddas via schemaläggaren i windows, så då har säkert fler närliggande områden till UAC och behörighet också gjorts om.

Skulle inte va otänkbart.

Vad händer om allt istället körs via VB skript när värdena skrivs till registret?

Man skulle iof få fråga om köra skriptet men försvinner inte UAC prompten?

Beror kanske på fall till fall :)

http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/registry/

Link to comment
Share on other sites

Alltså... det ursprungliga "hacket" består av 5 filer... 1 reg-fil som skapar högerklicksmenyn + 1 som tar bort den, 1 ikon för menyn, 1 scriptfil (vbs) som verkställer själva kommandot och en kommandoradsfil (cmd) som installerar allt och placerar filerna i en mapp på C:/root. Ganska krångligt att hantera för normalanvändaren alltså.

Nu råkade jag hitta ett gamalt Windows-verktyg (iexpress.exe) varmed jag lyckades skapa en enda installationsfil (exe) av dom 5 filerna. Allt fungerar utmärkt, med det undantaget att exe-filen måste köras som administratör för att fungera, eftersom den dels skriver till HKEY_CLASSES_ROOT i registret, dels kopierar filer till %systemroot%.

Jag fick då idéen att man kanske kunde undvika elevationen genom att dels skriva registernycklarna till HKEY_CURRENT_USER, dels kopiera nödvändiga filer till %UserProfile% istället... och ta mig tusan, det fungerade också utmärkt.

Problemet är bara att explorer.exe inte läser sökvägen i registret, när jag skriver den med systemvariabler... skriver jag den däremot som absolut sökväg, fungerar det fortfarande lika bra. Absolut sökväg är dock oanvändbart för alla utom för mig själv... och det var ju inte riktigt det som var meningen.

En normalbegåvad programmerare löser naturligtvis detta genom att skapa en ny installerare, förmodligen på något helt annat sätt än den jag skapat. Programmerare är jag INTE, om än normalbegåvad, så jag nöjer mig alltså med den installerare jag redan har...

Edited by e-son
Link to comment
Share on other sites

Tack jarru! Din länk talade om för mig vad problemet var.

Jag hade helt enkelt satt fel flagga på det 3:e registervärdet, det skapades som vanligt strängvärde när det i själva verket måste vara expanderbart. :)

Nu återstår ett kosmetiskt fel. Installationen, och funktionen, fungerar perfekt, men installationsförloppet säger att den misslyckades... vilket alltså inte stämmer.

Har just nu inte den blekaste om vad jag nu gjort för fel. :(

Installationsdialogen ser ut som följer... Det skall förresten stå "i Utforskarens högerklickmeny"... inte "skrivbordets".

post-1936-0-14894700-1330155908.png

post-1936-0-95339400-1330155924.png

post-1936-0-62874600-1330155939.png

Edited by e-son
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...