logo

 

in English

Stars and strips
Articles
About me


www.flickr.com

casselbrant's photos More of casselbrant's photos

[ 2010 ]

December
November
Oktober
September
Augusti
Juli
Juni
Maj
April
Mars
Februari
Januari

[ 2009 ]

December
November
Oktober
September
Augusti
Juli
Juni
Maj
April
Mars
Februari
Januari

[ 2008 ]

December
November
Oktober
September
Augusti
Juli
Juni
Maj
April
Mars
Februari
Januari


[ 2007 ]

December
November
Oktober
September
Augusti
Juli
Juni
Maj
April
Mars
Februari
Januari

[ 2006 ]

December
November
Oktober
September
Augusti
Juli
Juni
Maj
April
Mars
Februari
Januari

[ 2005 ]

December
November
Oktober
September
Augusti
Juli
Juni
Maj
April
Mars
Februari
Januari


[ 2004 ]

December
November
Oktober
September
Augusti
Juli
Juni
Maj
April
Mars
Februari
Januari

[ 2003 ]

December
November
Oktober
September
Augusti
Juli
Juni
Maj
April
Mars
Februari
Januari

[ 2002 ]

December
November
Oktober
September
Augusti
Juli
Mars-Juni






Valid HTML 4.01 Transitional

Valid CSS!


[ Så gör du inf-filer ]

I del två av PC+ Tema Shell Extensions tittar vi närmare på hur vi använder oss av inf-filer för att skapa användarvänliga installationer till både Windows 95/98 och NT.
Dessutom lägger vi till ytterligare funktionalitet.

ikonerDen förra delen avslutade vi med att konstatera att vi hade skapat ett par användbara Shell Extensions, men för att kunna installera dem på både Windows 95/98 och Windows NT behövdes två separata installationsprocesser.

Vad vi vill göra är att erbjuda en enkel distribution och enkel installation så att vem som helst ska kunna ladda ner våra Shell Extensions från exempelvis en hemsida och sedan bara klicka på en ikon för att kunna installera dem oavsett om man använder Windows 95/98 eller NT.

Nu kommer inf-filer in i bilden.

När det gäller inf-filer finns det ettpar regler vi måste ta hänsyn till och kunna för att det ska kunna fungera.
Inf-filer måste vara döpta efter den gamla DOS-standarden på 8+3 tecken.
Om vi använder ett långt filnamn så kommer inte inf-filens installationsprocess att fungera.

Samma sak gäller även för katalogen som inf-filen installeras ifrån.

Ladda ner exempelfilerna i valfritt format:

shell2exempel.lzh
shell2exempel.rar
shell2exempel.zip

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

VÅR FÖRSTA INF-FIL

Vi börjar med ett kodexempel.
Öppna din textredigerare och skapa en fil med namnet MyPrompt.inf och fyll den med texten i Rula 1 nedan.

Nu tittar vi närmare på vad vi egentligen har skapat.
De första två raderna i MyPrompt.inf är en verifikation av att filen är skriven för Windows version 4.
Kom ihåg att Windows 95 går under versionsbeteckning 4.00 och att Chicago var betanamnet på Windows 95.

Nästa sektion som heter [MyPromptInstall] är inte nödvändig att inkludera i filen, men eftersom vi vill ha ett snyggt resultat så ser vi till att ta med den.
Den är dessutom nästan alltid identisk med följande sektion, [DefaultInstall], som representerar vad som ska installeras på en dator med Windows 95.
Då kan vi lista ut att nästa sektion är vad som ska installeras på en dator med Windows NT.

Reg-filer tar ingen hänsyn till vilket av operativsystemen de installeras på, vilket gör att vi får mer kontroll om vi använder inf-filer och kan göra olika installationer beroende på operativsystem i en och samma fil.

Sektionen [DefaultInstall] är väldigt självförklarande och tydlig.
Den säger: "Lägg till i registret det som finns i sektionen som jag kallar MyPrompt.Reg".

Sektionen för Windows NT-installationen fungerar på samma sätt.
Som vi kan se i de följande sektionerna [MyPrompt.Reg] och [MyPrompt.Reg.NT] så innehåller de samma sak som de reg-filer som vi skapade i förra numret, med den skillnaden att vi nu har något som heter %MyPromptAccel%.

Detta dyker sedan upp igen i den sista sektionen [Strings] där vi ser att om vi använder MyPromptAccel istället för att skriva DOS härifrån så behöver vi bara ändra strängvärdet i denna sektion för att ändringen ska gälla i hela filen.

Vi har nu skapat en Shell Extension som är användbar både för Windows 95/98 och Windows NT.

För att installera den är allt du behöver göra att högerklicka på den och välja Installera.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

AVINSTALLATlON

Väl installerat är det väl inga problem?

Jag tror att de flesta som har använt Windows 95/98 och Windows NT ett tag vid flera tillfällen har retat sig på "spill" som ligger kvar efter att man har avinstallerat en applikation.
Dessutom har vi inte ens erbjudit någon avinstallation för vår Shell Extension ännu.

Som det är nu så måste man in i registret manuellt och söka reda på rätt strängar att ta bort med mera.

De flesta användare skulle vilja gå till Lägg till/ta bort program i Kontrollpanelen och avinstallera därifrån. Vi måste lägga till en hel del i vår inffil för att kunna använda Lägg till/ta bort program i Kontrollpanelen för avinstallation av vår Shell Extension.

För att Lägg till/ta bort program skall veta hur den skall ta bort vår Shell Extension måste vi ange avinstallationsinstruktioner, och detta gör vi i vår inf-fil.

Vi måste lägga till [DefaultUnlnstall]- och [DefaultUnInstall.ntx86]-sektioner i inf-filen för dessa instruktioner.

Dessa fungerar i stort sett på samma sätt som [Defaultlnstall]-sektionerna gör, fast baklänges, så att säga.
Där det står AddReg = "Någonting-' Här" ska du skriva DelReg = "NågontingHär".

Jag skrev också att vi var tvungna att lämna avinstallationsinstruktioner till Lägg till/ta bort program, och det kräver lite pyssel.
Du måste lämna en fil för den att läsa så att den vet vad den ska göra när någon vill avinstallera din Shell Extension.
Detta innebär att vi måste lägga en fil någonstans, men var?

Kommer du ihåg problemen vi hade när vi skulle kopiera ShowContent.bat-filen i förra numret?

Med inf-filer har vi mycket större frihet.
Faktum är att många kataloger har ett numeriskt värde.
Exempelvis kan vi ponera att du vill kopiera några filer till Windows-katalogen.
Windows NT-användare har ingen Windows-katalog, de har däremot en WINNT-katalog.

Kom också ihåg att c:\windows och c:\winnt är standardkatalogerna för installationen av systemfilerna.
Alla använder inte dessa standardkataloger.
Vissa installerar Windows 95 i kataloger som de döper till c:\Win95 och andra installerar på andra enheter än c:\.

Detta kan vi faktiskt ignorera om vi använder det numeriska värdet på destinationskatalogen, och i fallet med systemkatalogen (c:\windows eller c:\winnt) är det numeriska värdet 10.

Hur som helst, den generiska platsen för att kopiera en enstaka inf-fil för en Shell Extension är c:\windows\inf (eller var nu din systemkatalog ligger), så det är vad vi ska använda.
Titta gärna på vad du har där.
Det numeriska värdet på denna katalog är 17, så vår destinationskatalog är följaktligen 17.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

AVINSTALLATIONEN

Eftersom vi kopierar filer behöver vi addera information till [...Install...]-sektionen som säger kopiera dessa filer för den här typen av installation.

Det gör du med CopyFiles = DestinationHär , vilket innebär att vi måste en ny [DestinationHär] med en lista med filer som ska kopieras.

Det hela klarnar när du ser inf-filen.

Kom ihåg att anledningen till att vi går igenom detta är att kunna genomföra en avinstallation, så vi behöver lägga till en rad i [...Uninstall...]-sektionerna som lyder:
Radera dessa filer för den här typen av avinstallation. Detta gör vi med "DelFiles = DestinationHär".

Det finns en sista sak vi bör göra med vår inf-fil.

Det är en god ide att tala om för inf-filen var den kopierar ifrån, källdiskens beteckning.
Vi är inte tvungna till det, men då det är god sed gör också vi detta.

Det här är en strålande lösning om du har en Shell Extension på diskett och den är utspridd på flera.
Med denna sektion i inf-filen får du möjligheten att säga Dessa filer finns pådisk 2 och så vidare.

Vår nya inf-fil bör se ut som i Ruta 2, och vi döper den till MyPrmpt2.inf.

Skillnaden gentemot MyPrompt.inf är CopyFiles = MyPromptFiles.Inf-raderna.
Dessa talar om för installationen var den ska söka efter namnen på filerna som ska kopieras.

Detsamma gäller för [Defaultlnstall. ntx86]-sektionen.
Den måste veta var den ska söka efter namnen på filerna som ska kopieras.

Nu har du också noterat att både Windows 95- och Windows NT-installationen använder samma område för filkopierings information.
Detta för att de båda installerar samma filer till samma destination.

Vi kunde ha gjort en ytterligare sektion benämnd [MyPrompt.Files.Inf.NT] om vi velat och sedan ha CopyFiles = MyPrompt.Files.Inf.NT under [DefaultInstall.ntx86] om vi vill, men i detta fall är det slöseri med tid, eftersom sektionen [MyPrompt.Files.Inf.NT] skulle bli exakt densamma som [MyPrompt.Files.Inf].

[SourceDisksNamnes]-sektionen innehåller raden:

55 = "MyPrompt install disk","",1

Numret 55 är diskens identifikationsnummer.
Du kan välja vilket nummer du vill.

Sedan har vi My Prompt install disk.
Detta betyder endast vi kallar disk nummer 55 för My Prompt install disk.

Detta har betydelse när vi installerar och inte kan hitta en fil.

Du känner till hur det är när du ska installera något och datorn frågar efter "Windows 95 Cd-rom".
Samma sak här, bara det att den frågar efter MyPrompt install disk.

[SourceDisksFiles] talar om för installationen var filerna som ska kopieras finns.
Du kommer ihåg nummer 55 ovan som representerar disk-ID.
Den här sektionen säger:
Den här disken har den här filen, så att datorn är kapabel att lista ut vilken disk den behöver när installationen inte hittar en specifik fil.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

RÄTT FIL PÅ RÄTT DISKETT

Har du någonsin installerat diskettversionen av Windows 9S?
Har du i så fall undrat hur installationen vet vilken diskett som har vilken fil?

Det vi nu beskriver är i grund och botten hur detta går till.

Nu behöver vi tala om att MyPrompt befinner sig på Disk ID 55.
Gör det genom att skriva:

MyPrompt.INF = 55

och du är klar.
[DestinationDirs] säger:

Filer i den här sektionen ska till denna katalog.

Vi har redan rett ut att 17 motsvarar c:\windows\inf (eller vad din systemkatalog nu är), så vi behöver bara skriva MyPrompt.INF = 17 här för att tala om för den att placera filerna listade i MyPromptFiles.Inf i c:\windows\inf.

[MyPrompt.Reg] och [MyPrompt.Reg.NT] introducerar något nytt.
Nämligen avinstallationssträngarna.

HKLM betyder:
gå till HKEY_LOCAL_MACHINE i registret och skapa dessa nycklar.

Kommer du ihåg hur %MyPromptAccel% representerade DOS härifrån i den ursprungliga inf-filen?

Nu har vi en annan variabel kallad UDHERE, vilket representerar en sökväg i registret.
Det är en lång sökväg, och sökvägen är:

Software\Microsoft\Windows\CurrentVersion\Uninstall\MyPrompt.

Det är enklare att använda en variabel för den än att skriva ut sökvägen om och om igen.
Sökvägen är förresten densamma för Windows 95 och Windows NT.

Om du vill lägga in kommentarer i inf-filen så använder du dig av semikolon (;) före kommentarerna i varje rad, på samma sätt som du använder REM i en batch-fil.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

VISA INNEHÅLL - IGEN

Nu ger vi oss på vår Shell Extension Visa innehåll, som vi skapade förra gången.
Vi vill naturligtvis ha en inffil till denna Shell Extension också.

Vi använder vår nyskapade MyPrmpt2.inf som mall för att skapa ShwCont2.inf.

Kommer du ihåg vad som skilde vår ShowContents Shell Extension från MyPrompt?

MyPrompt använder /k cd %1 och ShowContent använder /c c:\progra∼1\ showcont.bat %1.

Det är i huvudsak den stora skillnaden.

Allt vi behöver göra efter att ha ordnat det är att ta hand om de mer kosmetiska aspekterna för installation och avinstallation.

Ändra alla förekommande MyPrompt till ShowCont och alla förekommande MyPrompt2.INF till ShowCont2.INF och vi är halvvägs igenom uppgiften.

Under [ShowCont.Files.Inf] lägger vi till ShowCont.bat.
Under [SourceDisksFiles] lägger vi också till bat-filen tillsammans med det disk-ID som vi ska använda (skriv ShowCont.bat = 55 om du följde exemplet tidigare).

I [DestinationDirs]-sektionen vill jag göra en större förändring.
För närvarande är den skriven för att kopiera filer till inf-katalogen.

För att vi ska få kläm på det här gör vi en förändring och kopierar till Windows-katalogen istället.
Och detta gör vi därför att de flesta människor inte går igenom sina Windows- (eller WINNT -) kataloger för att radera filer ogenomtänkt.

För att göra detta behöver vi endast ändra ShowCont.Files.Ini = 17 till ShowCont Files.Inf = 10.

Kom ihåg att 10 motsvarar c:\windows och c:\winnt eller vilken mapp du nu har valt att installera Windows i.

Nu när vi har ändrat destinationskatalogen måste vi ändra sökvägen till avinstallationsfilen.
Simpelt nog så ändrar vi bara %17% i de långa avinstallationskommandona till %10% istället.

För Windows 95 avinstallation ska det nu stå:

rundll.exe setupx.dll,lnstallHinfSection DefaultUninstall 132 %10%\ ShwCont2.inf

och för Windows NT ska det vara:

rundll32.exe syssetup.dll,SetuplnfObjectlnstallAction DefaultUninstall 132 %10%\shwCont2.inf.

Nu måste vi ändra kommandot den kör.
För Windows 95, ändra:

command.com /k cd ""%1"""

till:

command.com /c %10%\showcont.bat ""%1"""

och för Windows NT ändra:

cmd.exe /k cd ""%1"""

till:

cmd.exe /k %10%\showcontbat ""%1"""

Slutligen ändrar vi frasen som du vill ska visas i Lägg till/ta bort program och texten du vill ska visas i Popupmenyn när någon högerklickar på en mapp.

Under [strings]-sektionen, ändra ShowContName till ShowContName = "Visa innehåll Shell Extension (endast avinstallation)" och ändra även ShowContAccel till ShowContAccel = "Visa innehåll".

En sista kosmetisk förbättring hinner vi också med;
under [SourceDiskNames] ser vi till att det står:

55 = "ShowContent install disk","",1

Och slutligen ser vi till att UDHERE har texten

UDHERE = "Software\Microsoft\Windows\CurrentVersion\Uninstall\ShowContent"

Nu bör filen se ut som i Ruta 3 nedan.

Om vi installerar och testar vår ShwCont2.inf-fil så fungerar allt som det ska när vi provar på mappar.

Prova nu på en disk och du upptäcker att vi inte kan använda din Shell Extension som vi precis har skapat.

Ta en snabb titt i RegEdit.
Det finns en nyckel till under HKEY_CLASSES_ROOT som heter Drive.

Kopiera raderna som börjar med HKCR under [ShowCont.Reg] och [ShowCont.Reg.NT] och kopiera/klistra in dem.

Ändra Directory till Drive.

Vi har nu gjort så att vår Show Contents Shell Extension fungerar både på diskar och kataloger.

Nu har vi fått en inblick i och skapat ett par basala Shell Extensions.
Att skapa egna Shell Extensions kan underlätta ditt arbete i Windows rejält och det är ett utmärkt sätt att skräddarsy sin arbetsmiljö.

Lycka till med skapandet av egna Shell Extensions.

Roland Casselbrant
(PC-plus, nr 9, oktober 1999, sid 18-20)

[ < < Tillbaka ]

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


roland.casselbrant@bonetmail.com
Det är :

Powered by WEB/2

Powered by Södertörns EnergiCenter

Powered eComstation