Mittwoch, 23. Mai 2012


Artikel

Dezember 2009 | Artikel

They all come out in little boxes

(Link zum Artikel: http://www.entwickler.de/dotnet//002764)

von Tam Hanna

Text: Mobile Anwendungen für Windows ausliefern
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
PC-Anwender leiden täglich unter der gigantischen Vielfalt an so genannten Setup-Tools. Jedes Programm verwendet seine eigene Setup-Routine, die mit anderen inkompatibel ist. Manchmal muss sich der User nur mit seltsamen Termini herumschlagen – zeitweise scheitert die Installation aber schlicht und einfach ganz. Und das meist aus nicht nachvollziehbaren Gründen.
Teil 1   Teil 2   

Woran das liegt, ist leicht erklärt: Microsoft bot lange Zeit keinerlei Unterstützung für die Erstellung von Installationsroutinen. Die ersten Programme liefen von einer Diskette aus. Als die Ansprüche nach und nach immer komplexer wurden, entwickelte sich allerdings ein geradezu unüberschaubarer Markt an Setup-Produkten. Microsoft erkannte das Problem erst, als es längst zu spät war. Nicht zuletzt deshalb wollte man es bei Windows Mobile besser machen, und entwarf eine zentrale Methode zur Anwendungsauslieferung.

Neues Bier in alten Kisten

Das so genannte Kabinettdateiformat (kurz CAB für "Cabinet") ist tatsächlich ein alter Bekannter: Microsoft verwendet es seit Windows 95 zum Ausliefern seiner Produkte. Dies verwundert nicht, da es sich um ein sehr flexibles Archivformat handelt [1]. Beispielsweise unterstützt das Format drei verschiedene Kompressionsalgorithmen von unterschiedlichen Herstellern: DEFLATE, Quantum und LZX. Ein Archiv alleine macht jedoch noch keine Installationsroutine: CAB-Dateien für den PocketPC enthalten zusätzlich eine Konfigurationsdatei. In dieser ist (unter anderem) angegeben, welche Datei nach der Dekompression wohin soll – ein am Gerät befindlicher CAB Parser liest sie ein und führt die in ihr enthaltenen Anweisungen aus. Sehen wir uns nun eine derartige CAB-Datei näher an: Durch Dekompression (beispielsweise mit WinRAR) kann ihr Inhalt sichtbar gemacht werden – wie aus Listing 1 ersichtlich.

  1. C:\Documents and Settings\TAMHAN\Desktop\usbstick\em-boxes\firstcab\DaquCab>dir
  2. Volume in drive C is OS_Install
  3. Volume Serial Number is 10CE-B2DF
  4. Directory of C:\Documents and Settings\TAMHAN\Desktop\usbstick\em-boxes\firstca
  5. b\DaquCab
  6. 07/20/2009 08:18 PM <DIR> .
  7. 07/20/2009 08:18 PM <DIR> ..
  8. 01/05/2009 12:24 AM 410 0DaquCab.000
  9. 01/05/2009 12:24 AM 44,032 0DaquGUI.005
  10. 01/05/2009 12:24 AM 15,872 DAQUPO~1.001
  11. 01/05/2009 12:24 AM 15,872 DAQUPO~1.004
  12. 01/05/2009 12:24 AM 13,824 QUOTET~1.002
  13. 01/05/2009 12:24 AM 4,096 SetupDLL.003
  14. 01/05/2009 12:24 AM 4,096 SetupDLL.999
  15. 01/05/2009 12:24 AM 2,229 _setup.xml
  16. 8 File(s) 100,431 bytes
  17. 2 Dir(s) 11,140,411,392 bytes free

Die nummerierten Dateien sind jene, die nach Dekompression auf dem Handcomputer verbleiben. Die Datei setup.xml enthält die Zuordnungen zwischen Dateinamen und -nummern – mit einem Texteditor wie Notepad geöffnet, sieht sie aus wie Listing 2 es zeigt.

  1. <wap-provisioningdoc>
  2. <characteristic type="Install">
  3. <parm name="InstallPhase" value="install" />
  4. <parm name="SetupDLL" value="1" />
  5. <parm name="OSVersionMin" value="4.0" />
  6. <parm name="OSVersionMax" value="5.99" />
  7. <parm name="BuildNumberMin" value="0" />
  8. <parm name="BuildNumberMax" value="-536870912" />
  9. <parm name="AppName" value="Tamoggemon DailyQuote" />
  10. <parm name="InstallDir" value="%CE1%\DailyQuote" translation="install" />
  11. <parm name="NumDirs" value="4" />
  12. <parm name="NumFiles" value="5" />
  13. <parm name="NumRegKeys" value="0" />
  14. <parm name="NumRegVals" value="0" />
  15. <parm name="NumShortcuts" value="1" />
  16. </characteristic>
  17. <characteristic type="FileOperation">
  18. <characteristic type="%InstallDir%\DailyQuote" translation="install">
  19. <characteristic type="MakeDir" />
  20. <characteristic type="DaquPopup.exe" translation="install">
  21. <characteristic type="Extract">
  22. <parm name="Source" value="DAQUPO~1.001" />
  23. </characteristic>
  24. </characteristic>
  25. <characteristic type="QuoteTools.dll" translation="install">
  26. <characteristic type="Extract">
  27. <parm name="Source" value="QUOTET~1.002" />
  28. </characteristic>
  29. </characteristic>
  30. </characteristic>
  31. <characteristic type="%InstallDir%" translation="install">
  32. <characteristic type="MakeDir" />
  33. <characteristic type="SetupDLL.dll" translation="install">
  34. <characteristic type="Extract">
  35. <parm name="Source" value="SetupDLL.003" />
  36. </characteristic>
  37. </characteristic>
  38. <characteristic type="DaquPopup.exe" translation="install">
  39. <characteristic type="Extract">
  40. <parm name="Source" value="DAQUPO~1.004" />
  41. </characteristic>
  42. </characteristic>
  43. <characteristic type="DaquGUI.exe" translation="install">
  44. <characteristic type="Extract">
  45. <parm name="Source" value="0DaquGUI.005" />
  46. </characteristic>
  47. </characteristic>
  48. </characteristic>
  49. <characteristic type="%CE11%" translation="install">
  50. <characteristic type="MakeDir" />
  51. <characteristic type="Daily Quote.lnk" translation="install">
  52. <characteristic type="Shortcut">
  53. <parm name="Source" value="%InstallDir%\DaquGUI.exe" translation="install" />
  54. </characteristic>
  55. </characteristic>
  56. </characteristic>
  57. </characteristic>
  58. <characteristic type="Registry">
  59. </characteristic>
  60. </wap-provisioningdoc>

Teil 1   Teil 2   

Kommentare