Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Auto-Moto
Mobilní telefony
Notebooky  |  Tablety
Příslušenství
Wearables  |  Ostatní
Svět hardware  |  Digimanie  |   TV Freak

Vytváříme instalační CAB soubory (nejen pro vývojáře)

17.5.2004, eXEden, návod
Nejenom vývojáři potřebují vytvářet instalační CAB soubory pro své programy. Upotřebení CAB souborů může být i jiné - např. jako součást vlastních ROMek, po provedeném hard-resetu by nejeden z vás potřeboval automaticky vytvořit v registrech nějaké změny, nainstalovat si pouze zástupce od programů uložených na SD (CF) kartě. Pokud by se i vám něco takového hodilo, pak si přečtěte následující článek, který se pokusí být průvodcem po záludnostech vytváření CAB souborů.
K napsání tohoto článku mě přivedla prosba jednoho z uživatelů, který chtěl, abych mu vytvořil CAB soubor podle jím daných požadavků tak, aby nemusel všechny operace provádět po hard-resetu ručně. Tvorba CAB souborů není díky neexistenci programu s GUI (Graphic User Interface) nikterak jednoduchá a veškeré operace a editace se provádějí v textovém editoru a na příkazové řádce. Přesto po vytvoření jakési šablony a pochopení mála z tvorby CAB souborů bude každý uživatel schopen vytvořit si CAB soubor přesně na míru a úspěšně jej využívat ke své spokojenosti, přidat do vlastních ROMek apod. Z výše uvedeného plyne, že článek není vyloženě přiručkou pro vývojáře, ale snaží se být i jakýmsi průvodcem pro běžné uživatele, kterým by se uvedené využití mohlo hodit při každodenním používání jejich "pomocníků".


Co všechno budete potřebovat


Pro tvorbu CAB souborů budete potřebovat program Microsoft CAB Wizard, který (pokud nemáte nainstalováno vývojové prostředí, jehož je součástí) si můžete stáhnout zde (109,31 KB). Dále budete potřebovat jakýkoli textový editor a hodně trpělivosti.


Použití programu CABWiz


Program CABWiz se spouští z příkazového řádku a je řízen pomocí parametrů, které se mu předávají. Pokud jej spustíte bez parametrů, dozvíte se vše, co k vytvoření CAB souboru budete potřebovat



Podle obrázku je jasné, že parametry jsou celkem čtyři:
  • inf_file = INF soubor - zdrojový popisný soubor, podle kterého CABWiz generuje instalační soubor (povinný)
  • dest_dir = Cílový adresář - adresář, kam bude výsledný CAB soubor uložen (nepovinný)
  • err_file = Chybový soubor - soubor, kam CABWiz zapisuje případné chyby, ke kterým může při generování CAB souborů dojít (nepovinný)
  • cpu_type = Typ procesoru - udává, pro jaký typ procesoru je instalační soubor generován. V dnešní době již nemá smysl uvádět cokoli jiného než ARM (nepovinný)

Jak vidno, tak těch parametrů není moc, a nás zajímá ten jeden jediný- INF soubor. INF soubor je totiž hlavním činitelem při tvorbě CAB souborů a budeme se mu věnovat v následujícím odstavci. "Nevývojářům" můžou připadat následující řádky složité nebo nedůležité. Jsou však bohužel nutné pro pochopení vytváření CAB souborů. Ne všechna nastavení jsou důležitá, a tak na samotný závěr na konkrétním příkladě uvedu ta, která jsou pro "nevývojáře" důležitá a která ve většině případů budou stačit i vývojářům.


Struktura INF souboru


INF soubor specifikuje veškerá nastavení, která CABWiz k vytváření CAB souborů potřebuje. Soubor je svoji strukturou podobný INI souboru a sestává z několika sekcí:
  • Version - autor a verze
  • CEStrings - řetězce používané jako substituce pro názvy adresářů apod.
  • CEDevice - specifikace verze a platformy, pro kterou je CAB soubor určen
  • DefaultInstall - implicitní instalace aplikace
  • SourceDiskNames - seznam adresářů, kde jsou uloženy zdrojové soubory pro CAB soubor
  • SourceDiskFiles - seznam souborů, které jsou zdrojovými soubory pro CAB soubory
  • DestinationDirs - seznam cílových adresářů na straně PDA (tzn., kam se bude aplikace instalovat)
  • CopyFiles - implicitní soubory, které se budou kopírovat do PDA
  • AddReg - klíče a hodnoty, které se budou během instalace přidávat/měnit
  • CEShortCuts - seznam zástupců, kteří budou během instalace vytvořeny


Sekce Version


[Version]
Signature = "signature_name"
Provider = "INF_creator"
CESignature = "$Windows CE$"
  • signiture_name - musí být buď "$Windows NT$" nebo "$Windows 95$"
  • INF_creator - název poskytovale aplikace (např. eXEden, Microsoft apod.)


Sekce CEStrings


[CEStrings]
AppName = app_name
InstallDir = default_install_dir
  • app_name - název aplikace. Všechny výskyty %AppName% budou nahrazeny touto hodnotou
  • default_install_dir - implicitní adresář pro instalaci. Všechny výskyty %InstallDir% budou nahrazeny touto hodnotou. Mohou se zde používat i předdefinované konstanty z CABWizu a jejich seznam následuje.


Seznam definovaných konstant pro adresáře


  • %CE1% = Program Files
  • %CE2% = Windows
  • %CE4% = Windows
  • %CE5% = My Documents
  • %CE8% = Program FilesGames
  • %CE11% = WindowsStart MenuPrograms (pro zastupce)
  • %CE14% = WindowsStart MenuProgramsGames (pro zastupce)
  • %CE15% = WindowsFonts
  • %CE17% = WindowsStart Menu (pro zastupce)


Sekce CEDevice


[CEDevice]
[VersionMin = [major_version.minor_version]]
[VersionMax = [major_version.minor_version]]


VersionMin, VersionMax určují minimální resp. maximální verzi operačního systému (Windows Mobile), pro který je CAB soubor určen (např. 3.0)


Sekce DefaultInstall


Sekce slouží pro implicitní nastavení instalace a zejména k definování skupin, které tvoří instalaci.

[DefaultInstall]
Copyfiles=copyfile_list_section[,copyfile_list_section]
AddReg=add_registry_section[,add_registry_section]
[CEShortcuts=shortcut_list_section[,shortcut_list_section]]
[CESetupDLL=setup_DLL]
[CESelfRegister=self_reg_DLL_filename[,self_reg_DLL_filename]
  • copy_file_list_section - seznam sekcí, které definují skupiny souborů pro kopírování
  • add_registry_section - seznam sekcí, které definují změny v registrech
  • shortcut_list_section- seznam sekcí, které definují vytváření zástupců
  • setup_DLL - název DLL knihovna, která je automaticky volaná při instalaci a která se řídí určitými pravidly (snad někdy příště). Soubor musí být deklarován v sekci SourceDiskFiles
  • self_reg_DLL_filename - seznam souborů, které budou automaticky zaregistrovány jako COM objekty


Sekce SourceDiskNames


Tato sekce definuje seznam zdrojových adresářů na Vašem disku, tzn. místo odkud si CABWiz načítá soubory, které budou součástí instalace.

[SourceDisksNames]
disk_id= ,comment,,path
[disk_id= ,comment,,path]
  • disk_id - identifikátor zdroje souborů
  • comment - komentář (popis zdroje souborů)
  • path - relativní cesta ke zdroji souborů (tzn. odvozená od aktuální cesty)


Sekce SourceDiskFiles


Sekce definuje seznam souborů spolu s jejich umístěním ve zdrojových adresářích.
[SourceDisksFiles]
filename=disk_id
[filename=disk_id]
  • filename - jméno zdrojového souboru
  • disk_id - disk_id skupiny zdrojových souborů ze sekce SourceDiskNames


Sekce DestinationDirs


Definuje konkrétní adresáře pro skupiny souborů definovaných v sekci DefaultInstall a podsekci CopyFiles.

[DestinationDirs]
file_list_section = 0,subdir
[file_list_section = 0,subdir]
[DefaultDestDir=0,subdir]
  • file_list_section - název skupiny cílových souborů ze sekce DefaultInstall
  • subdir - adresář, do kterého se budou soubory patřící do této skupiny kopírovat. Hodnota může obsahovat zástupné konstanty %CEx% i %InstallDir%


Sekce CopyFiles


Není to klasická sekce jako ostatní v INF souboru, ale může to být sekcí jedna či víc, v závislosti na tom, co jsme definovali v sekci DefaultInstall a podsekci CopyFiles (a potažmo i v DestinationDirs). Na tomto místě se deklaruje propojení souborů se skupinami souborů.

[copyfile_list_section]
destination_filename,[source_filename],[,flags]
[destination_filename,[source_filename],[,flags]]
  • copyfile_list_section - hlavičkou je skupina souborů ze sekce DefaultInstall a podsekce CopyFiles
  • destination_filename - název cílového souboru
  • source_filename - název zdrojového souboru (většinou shodné s destination_filename)
  • flags - příznak pro akci, k níž může během kopírování dojít. Jejich seznam následuje a hodnota může být kombinací (klasický OR) jednotlivých hodnot


Seznam příznaků pro kopírování souborů


  • 0x00000001 - zobrazit varování při přerušení kopírování souboru
  • 0x00000002 - nepovolit přerušit kopírování soüboru
  • 0x00000010 - nedovolit přepsat již existující soubor
  • 0x00000400 - kopírovat soubor pouze pokud již existuje
  • 0x20000000 - nekopírovat soubor pokud je cílový soubor novější
  • 0x40000000 - ignorovat datum při přepisu cílového souboru


Sekce AddRegs


V sekci DefaultInstall jsme definovali podsekci AddRegs a nyni nastává ten pravý okamžik pro upřesnění změn v registrech, které mohou nastat při instalaci z CAB souboru. CAB soubory umí hodnoty pouze měnit a přidávat, nikoli mazat.

[add_registry_section]
registry_root_string , subkey,[value_name], flags, value[,value]
[registry_root_string, subkey,[value_name], flags, value[,value]]
  • add_registry_section - hlavičkou je jedna skupina ze sekce DefaultInstall a podsekce AddRegs
  • registry_root_string - nabývá hodnot HKLM (HKEY_LOCAL_MACHINE), HKCR (HKEY_CLASSES_ROOT) nebo HKCU (HKEY_CURRENT_USER)
  • subkey - název podklíče, který má být přidán/změněn
  • value_name - název hodnoty, která má být přidána/změněna. Pokud bude název prázdný, změní se "default" hodnota podklíče
  • flags - příznaky pro úpravu registrů. Jejich seznam následuje
  • value - nová hodnota


Seznam příznaků pro práci s registry


  • 0x00000000 - řetězcová hodnota (implicitní hodnota pokud zadá pouze 0x00000002)
  • 0x00000001 - binární hodnota (např. TBOpt), value uvedena jako výčet bytových hodnot (hexadecimálních bez 0x) oddělených čárkou
  • 0x00000002 - pokud hodnota existuje, nepřepsat ji (v kombinaci s jinými)
  • 0x00010001 - hodnota DWORD (číselná hodnota
  • 0x00010000 - multi-řetězcová hodnota (MULTI_SZ), value je seznam řetězců oddělených čárkou


Od teorie k praxi


V předchozích odstavcích jsme si ukázali principy tvorby CAB souborů, představili jsme si program Microsoft CAB Wizard a také jsme si detailně představili strukturu INF souborů. Teorie je sice hezká věc, ale bez praktických ukázek by tento článek někomu asi moc nepomohl. Takže si vše ukážeme na praktickém příkladě vycházejícím z následující situace:

1. Nechcete v config.txt pro vlastní ROM vypisovat všechny řádky
2. Potřebujete obnovit zástupce a nakopírovat např. témátka
3. Potřebujete provést jednoduché tweaky v registrech, zapsat do registrů informace pro některé programy
4. atd. (však Vy si už naleznete způsob, jak toho využít)

Připravíme si tedy INF soubor podle našich představ:

[Version]
Signature = "$Windows NT$"
Provider = "eXEden"
CESignature = "$Windows CE$"

[CEStrings]
AppName = "Nastavení"
InstallDir = %CE2%

[CEDevice]
VersionMin=3.00
VersionMax=4.20

[DefaultInstall]
CopyFiles = CopyLinks,CopyToWindows
AddReg = RegSettings

[SourceDisksNames]
1 = ,"A1",,A1
2 = ,"A2",,A2

[SourceDisksFiles]
CAB Install.lnk = 1
Database Explorer.lnk = 1
Aliens.tsk = 2

[DestinationDirs]
CopyLinks = ,%CE11%
CopyToWindows = ,%CE2%

[CopyLinks]
"CAB Install.lnk",CAB Install.lnk,,0x00000001
"Database Explorer.lnk",Database Explorer.lnk,,0x00000001

[CopyToWindows]
"Aliens.tsk",Aliens.tsk,,0x00000001

[RegSettings]
HKLM,SOFTWAREMicrosoftShell,TBOpt,0x00000001,13,0,0,0

Během instalace se zkopírují dva zástupci (CAB Install.lnk a Database Explorer.lnk) do složky WindowsStart MenuPrograms. Dále se zkopíruje jedno témátko (Aliens.tsk) do systémové složky Windows a v neposlední řadě se vytvoří binární hodnota TBOpt v podklíči HKEY_LOCAL_MACHINESOFTWAREMicrosoftShell, která způsobí známý tweak (zobrazení času i data v horní liště). Soubory se zástupci se nachází na zdrojovém disku v adresáři A1 a soubor témátek se nachází v adresáři A2. Není asi potřeba tento příklad rozebírat více. Přiložený projekt (166,39 KB) může sloužit jako jakási šablona pro vás všechny.


Rozšíření příkladu


Nyní si ukážeme jednoduché rozšíření příkladu o přidání nového souboru. Předpokladem je, že nový soubor již máme nachystaný ve složce A3 a jeho jméno je např. Setting.dat a má se kopírovat na PDA do složky My Documents. Vzhledem k tomu, že se tento soubor kopíruje na odlišné místo od již přidaných souborů, definujeme si novou skupinu souborů v sekce DefaultInstall a v podsekci CopyFiles a pojmenujeme ji např. CopyToDocuments. Sekce tedy bude vypadat následovně:

[DefaultInstall]
CopyFiles = CopyLinks,CopyToWindows,CopyToDocuments
AddReg = RegSettings

Složku A3 musíme přidat do sekce SourceDisksNames tak, aby o ní CABWiz věděl a provedeme to stejným způsobem, jako jsme tam přidali složky A1 a A2. Sekce bude vypadat následovně:

[SourceDisksNames]
1 = ,"A1",,A1
2 = ,"A2",,A2
3 = ,"A3",,A3

Dalším krokem je propojení souboru Settings.dat s konkrétní zdrojovou složkou, které se provádí v sekci SourceDisksFiles. Náš soubor pochází z adresáře s id 3 a celá sekce bude tedy vypadat:

[SourceDisksFiles]
CAB Install.lnk = 1
Database Explorer.lnk = 1
Aliens.tsk = 2
Settings.dat = 3

Nyní musíme CABWizu říci, do které složky v PDA má kopírovat soubory ze skupiny CopyToDocuments. Řekli jsme si, že soubor se bude kopírovat do složky My Documents a nastavení provedeme v sekci DestinationDirs:

[DestinationDirs]
CopyLinks = ,%CE11%
CopyToWindows = ,%CE2%
CopyToDocuments = ,%CE5%

Po předchozím kroku již je vlastně skoro vše hotovo a chybí nám jediné - vytvořit výčet souborů, které se mají se skupinou CopyToDocuments kopírovat spolu s příznaky pro kopírování. Již z teoretické části víme, že toto nastavení se provádí v sekci CopyFiles, kde se jednotlivé sekce jmenují podle hodnot podsekce CopyFiles v sekci DefaultInstall. Výpis celé sekce CopyFiles by měl tedy vypadat následovně:

[CopyLinks]
"CAB Install.lnk",CAB Install.lnk,,0x00000001
"Database Explorer.lnk",Database Explorer.lnk,,0x00000001

[CopyToWindows]
"Aliens.tsk",Aliens.tsk,,0x00000001

[CopyToDocuments]
"Setting.dat",Setting.dat,,0x00000001

Na úplný závěr si CAB soubor necháme vygenerovat, abychom se ubezpečili, že přidání nového souboru je opravdu funkční.


Závěr


Problematika vytváření instalačních CAB souborů není nikterak složitá a tento článek se vám ji snažil pouze přiblížit a uvést jeden praktický příklad. Nastavení je mnoho a je jenom věcí praxe, kdy se z vás stanou opravdoví CAB-guru. Chce to jen zkoušet a zkoušet a kýžený výsledek se brzy dostaví. Snad vám tento článek přinesl něco nového a třeba i pomohl v něčem, co jste již dlouho chtěli vyřešit, ale nevěděli, jak na to.
reklama