Autorun, oder doch nicht?

Die Autorun Funktion sorgt seit Windows® 95 dafür, dass nach dem Einlegen einer CD-ROM, ein vorgesehenes Programm automatisch startet. Desweiteren kann dem Kontextmenü des Laufwerks ein Menüeintrag hinzugefügt werden, mit dem man ebenfalls das Programm aufrufen kann. Leider funktioniert der Aufruf nur bei ausführbaren Dateien. Zwar kann ab Windows 2000 in der autorun.inf an Stelle von open auch shellexecute eingesetzt werden, um so beliebige Dateien zu öffnen. Diese Funktion scheitert jedoch auf allen Win 9.x Rechnern. Erst nach der Installation vom Internet Explorer 5 werden bestimmte DLLs im System ausgetauscht, so das auch hier dieser Befehl funktioniert. Wer will sich schon darauf verlassen, wenn er eine CD-ROM mit einer Auflage von einigen tausend Stück produziert.

Eine beliebige Datei mit dem in Windows zugeordneten Programm zu starten ist nicht schwer, wird sich der Programmierer sagen. Er schreibt kurzerhand ein ausführbares Programm (wollen wir es startcd.exe nennen), das mittels API-Aufruf shellexecute eine Datei öffnet. Damit scheint allen geholfen zu sein: autorun startet die ausführbare startcd.exe und diese eine beliebige andere Datei von der CD-ROM. Startcd.exe würde noch einen weiteren Vorteil bieten: oft ist es nicht erwünscht dass das zu startende Programm im Root-Verzeichnis der CD-ROM liegt. Kein Problem für autorun, schließlich kann man hinter open die ausführbare Datei inkl. Pfad angeben. Was ist aber wenn der Anwender sein autorun deaktiviert? Sie müssten dem Anwender zumindest eine Readme-Datei anbieten, die ihm den Weg zur CD-Anwendung beschreibt. Auch nicht gerade schön, oder? Und dennoch findet man immer wieder CD-ROMs bei denen noch nicht mal die Readme-Datei vorhanden ist. Hier hilft dann nur noch ein Blick in die autorun.inf um zu erfahren was eigentlich starten sollte. Der Einsatz von startcd würde auch dieses Problem beheben. Leider gibt es einen kleinen Wermutstropfen: der VB-Entwickler geht wieder mal leer aus, weil ein VB-Programm nicht ohne weiteres von CD-ROM startet. Wer sich für diese Thematik interessiert, sollte unseren Artikel zum AppLoader lesen.

Was bleibt übrig? Entweder der VB-Entwickler greift zurück auf sein altes VB4 - sofern es die Lizenzbestimmungen noch zulassen - oder er schaut mal wieder über den Tellerrand zu anderen Programmiersprachen, wie z.B. C, PowerBasic oder Delphi.

Beschreibung

Die startcd.exe wird in die open Zeile der autorun.inf Datei eingetragen. Als Startparameter wird die CD-Anwendung festgelegt:

[autorun]
open=startcd.exe daten\start.htm
icon=meinicn.ico
label=Meine CD-ROM

Optional kann hier auch der Abschnitt für das Kontextmenü festgelegt werden:

shell=OpenCD
shell\OpenCD\=CD-ROM starten
shell\OpenCD\Command=startcd.exe daten\start.htm

An Stelle von start.htm können Sie natürlich auch eine andere Datei eintragen. Auch ausführbare Dateien (Programme) sind hier erlaubt. Dadurch kann das auszuführende Programm in einem beliebigen Pfad liegen.

[autorun]
open=startcd.exe bin\prog.exe
shell=OpenCD
shell\OpenCD\=CD-ROM starten
shell\OpenCD\Command=startcd.exe bin\prog.exe

Sollte das auszuführende Programm ebenfalls einen oder mehrere Startparameter benötigen, wird dafür ein weiterer Abschnitt in autorun angelegt:

[startcd]
file=data\daten.txt
parameter=/r
alternativ=readme.txt

Damit bekommen Sie Möglichkeiten die mit normalen Windows-Mitteln nicht mehr machbar sind. Das Programm startcd.exe muss sich immer im Root-Verzeichnis der CD-ROM befinden. Die Pfade zu den weiteren Dateien werden relativ zum Root-Verzeichnis angegeben. Sollte ein Anwender auf seinem PC die Autostart-Funktion deaktivieren, kann er bei eingelegter CD-ROM die CD-Anwendung mit einem Doppelklick auf startcd.exe starten. In diesem Fall fehlt startcd der Startparameter. Folglich liest startcd die Zeile open aus der autorun.inf und ermittelt die zu öffnende Datei. Sollte der Programmstart aus irgendeinen Grund scheitern, (es gibt z.B. keine verknüpfte Anwendung) wird die Alternativ-Datei geöffnet.

Beispiel

Wir wollen eine PowerPoint-Präsentation auf CD-ROM anbieten. Neben der Präsentation soll auch der PP-Viewer enthalten sein. Dieser soll beim Einlegen der CD-ROM direkt mit der Präsentation starten. Ausgehend von folgender Datei- Struktur:

VIEWER Viewer-Verzeichnis
   ppview32.exe PP Viewer
   ...... weitere PP-DLLs usw.
DATA Daten-Verzeichnis
   projekt.ppt Präsentation
   autorun.inf Konfigurationsdatei
   icon.ico Icon-Datei
   startcd.exe CD-Starter
   readme.txt Readme Datei

erstellen wir folgende autorun.inf:

[autorun]
open=startcd.exe viewer\ppview32.exe
icon=icon.ico
label=Meine Projekt
shell=OpenCD
shell\OpenCD\=CD-ROM starten
shell\OpenCD\Command=startcd.exe viewer\ppview32.exe
[startcd]
file=data\projekt.ppt
alternativ=readme.txt

Für den Anwender ergeben sich folgende Möglichkeiten:

Funktionsweise

Programmablauf
(1) Der Anwendungspfad wird ermittelt. Dieser wird benötigt um die relativen Pfade zu ergänzen. So wird z. B. aus data\start.htm ein D:\data\start.htm.

(2) Wurde ein Startparameter übergeben? Ja, wenn startcd.exe per Autostart aufgerufen wurde. Sollte der Anwender jedoch die startcd.exe manuell (z. B. per Mausklick) aufrufen, muss der vorgesehene Startparameter aus der autorun.inf ausgelesen werden (3).

(4) Einlesen der Zeilen File und Parameter im Abschnitt [startcd] aus der autorun.inf. Einer ausführbaren Datei können wir so weitere Parameter (Argumente der Befehlszeile) übergeben. Wenn die Prüfung (5) keine weiteren Parameter ergibt, wird mit der API-Funktion die Datei aus dem Startparameter geladen (7). Dies kann sehr wohl auch eine Exe-Datei sein, ShellExecute kann damit umgehen. ShellExecute kann jedoch keine Befehls-argumente übergeben. Deshalb nutzen wir in diesem Fall die PB-Funktion Shell (8). Davor werden aber noch lange Pfade und Dateinamen in kurze Pfade bzw. Dateinamen umgewandelt (6).

(9) Nun gilt es nur noch zu prüfen ob bei den Aufrufen ShellExecute oder Shell Fehler aufgetreten sind und ggf. eine Fehlerprozedur (10) abarbeiten.
 

Download und Links

CD-Starter ist Open Source und darf frei verwendet werden. Bitte beachten Sie jedoch dass wir keinen Support für dieses Programm gewähren. Den CD-Starter verwenden Sie auf eigene Verantwortung. Wir haften nicht für eventuelle Schäden die Ihnen oder Ihren Kunden durch die Benutzung des Programms entstehen sollten. Sie dürfen die Quellcodes in eigenen Projekten verwenden. Für die verlinkten Seiten und deren Inhalt ist WW-Anwendungsentwicklung nicht verantwortlich. Der Inhalt oder der Link selber könnten sich ändern. Wir kontrollieren zwar regelmäßig diese Verknüpfungen haben aber keinen Einfluss auf deren Inhalt oder Aktualität. Dankbar sind wir jedem Leser dieser Seite der uns drauf aufmerksam macht dass sich an der Qualität der verlinkten Seiten was ändert.

Dateiname Größe Beschreibung
startcd.exe 17 KB CD-Starter - PowerBasic Programm. Eine in C geschriebene startcd.exe kommt auf ca. 40 KB. Kein gravierender Unterschied beim Start von der Festplatte - von einem langsamen CD-ROM Laufwerk jedoch eventuell spürbar ;-)
startcd.bas 5 KB PowerBasic Quellcode. Datei im Browser anzeigen.
vbstart.bas 5 KB Wer kein PowerBasic sein Eigen nennt und die Anwendung dennoch an eigene Bedürfnisse anpassen will, kann auch auf Visual Basic 4 ausweichen. Eine startcd.exe sollte keinesfalls mit VB5 oder VB6 erstellt werden.
Datei im Browser anzeigen.
autorun.inf 1 KB Die Konfigurationsdatei aus unserem Beispiel.

Autorun.inf Commands -  Diese Microsoft® Seite beschreibt den Aufbau einer autorun.inf Datei.

***

©2004 WW-Anwendungsentwicklung