Tipps


  1. Windows RunDLL32 Funktionen
  2. Installshield Setup.log [ResponseResult]
  3. Hilfe zur Microsoft DLL Hell
  4. Windows NT/2000/XP/2003 Kommando-Zeile

Windows RunDLL32/RunDLL Funktionen

32-bit-Funktionen: Aufruf mit RunDLL32 <dll>,<Parameter1>,<Parameter2> ...

 

DLL Funktion Parameter Bemerkung Plattform
advpack.dll LaunchINFSection <Inffile>,<Section> Installation aus "Advanced Inf-Files" Alle
appwiz.cpl NewLinkHere Zielverzeichnis mit abschließendem \ Eine neue Verknüpfung anlegen Alle
desk.cpl InstallScreenSaver <saver.scr> <saver.scr> als Standardbildschirmschoner installieren und Register "Bildschirmschoner" starten Alle
diskcopy.dll DiskCopyRunDll Laufwerk (0=A:, 1=B:) Fenster "Diskette kopieren" anzeigen Alle
msprint2.dll RUNDLL_PrintTestPage   Testseite ausdrucken. Sind mehrere Drucker vorhanden, wird ein Auswahldialog angezeigt 9X/ME
rnaserv.dll CallerAccess   Dialogbox "DFÜ-Server" aufrufen 9X/ME
rnaui.dll RnaDial <Provider> Einwahl über DFÜ-Verbindung <Provider> 9X/ME
rnaui.dll RnaWizard   Verbindungsassisteneten starten 9X/ME
setupapi.dll InstallHinfSection 132 <.inf-Datei> Installation aus einer .inf-Datei NT/2000
shell32.dll Control_FillCache_RunDLL   Systemsteuerung-Applets neu einlesen Alle
shell32.dll Control_RunDLL     Alle
shell32.dll OpenAs_RunDLL     Alle
shell32.dll ShellAboutA <Text> Info-Dialog Alle

shell32.dll

SHExitWindowsEx

0 = Benutzer abmelden

1 = Windows herunterfahren

2 = Windows neu starten

4 = beenden erzwingen

8 = ausschalten

-1 = GUI neu starten

Parameter (mit Ausnahme von -1) können addiert werden, z.B. 13 = herunterfahren erzwingen und ausschalten

9X/ME

shell32.dll SHFormatDrive   Dialog zum Formatieren einer Festplatte 9X/ME

shell32.dll

SHHelpShortcuts_RunDLL

AddPrinter

Connect

Disconnect

FontsFolder

PrintersFolder

Drucker hinzufügen

Netzlaufwerk verbinden

Netzlaufwerk trennen

Fonts-Ordner

Drucker-Ordner

Alle

syncui.dll Briefcase_Intro   Aktenkoffer-Einführung Alle
syncui.dll Briefcase_Create   Neuen Aktenkoffer anlegen Alle
sysdm.dll InstallDevice_Rundll   Hardware-Assistenten starten Alle
url.dll FileProtocolHandler <URL> Die Anwendung, die zu <URL> passt, wird aufgerufen Alle
url.dll MailToProtocolHandler <E-Mail Adresse> Öffnet eine neue E-Mail im Standard-Mailprogramm Alle
url.dll NwesProtocolHandler <Newsgroup> Öffnet die <Newsgroup> im Newsgroup-Programm Alle
url.dll TelnetProtocolHandler <IP-Adresse/Host> Telnetverbindung starten Alle

 

16-bit-Funktionen: Aufruf mit RunDLL <dll>,<Parameter1>,<Parameter2> ...

 

setupx.dll InstallHinfSection 132 <.inf-Datei> Installation aus .inf-Datei 9X/ME
user.exe CascadeChildWindows   Alle Fenster überlappend 9X/ME
user.exe ExitWindows   Windows herunterfahren 9X/ME
user.exe ExitWindowsExec   Windows neustarten 9X/ME
user.exe MessageBeep   Ping 9X/ME
user.exe RepaintScreen   Desktop aktualisieren (=F5) 9X/ME
user.exe SetCursorPos   Maus-Zeiger nach links oben setzen 9X/ME
user.exe TileChildWindows   Alle Fenster nebeneinander 9X/ME
user.exe WNetConnectDialog   Dialog "Netzlaufwerk verbinden" anzeigen 9X/ME
user.exe WNetDisconnectDialog   Dialog "Netzlaufwerk trennen" anzeigen 9X/ME
Weitere Infos unter: http://support.microsoft.com/support/kb/articles/Q164/7/87.ASP
Zurück zum Anfang

Installshield Setup.log [ResponseResult]

Bei Verwendung der "Silent Installation" von InstallShield gibt es nur eine Möglichkeit, die Ursache für den Abbruch einer automatischen Installation festzustellen. Standardmäßig erzeugt jedes Installshield-Setup im Windows-Ordner eine Datei namens setup.log, in der im Abschnitt [ResponseResult] der Wert ResultCode das Ergebnis festhält. Der Name und Pfad der Log-Datei kann über den Kommando-Zeilen-Schalter /f2<Pfad\Dateiname> geändert werden.

 

0     Success

-1    General error

-2    Invalid mode

-3    Required data not found in setup.iss

-4    Not enough memory available

-5    File does not exist

-6    Cannot write to the response file

-7    Unable to write to the log file

-8    Invalid path to the InstallShield Silent response file

-9    Not a valid list type (string or number)

-10    Data type is invalid

-11    Unknown error during setup

-12    Dialogs are out of order

-51    Cannot create the specified folder

-52    Cannot access the specified file or folder

-53    Invalid option selected

 

Der wohl häufigste Code -12 bedeutet, dass die in der setup.iss-Datei gespeicherten Antworten nicht mit der ablaufenden Installation übereinstimmen. Der ResponseResult Code -5 bedeutet meist, dass die .iss Datei nicht gefunden wurde. Hilfreich ist die Angabe von /f1 .\setup.iss statt /f1 setup.iss bzw. den kompletten Pfad. Seit InstallShield Version 6 wird statt Fehler -12 der Fehler -3 protokolliert.

Selbstextrahierende Installshield Setups (Package for the Web) können entweder ausgepackt werden oder über den zusätzlichen Schalter /a automatisiert werden. Nach dem Schalter /a folgen die Befehle, die an das ausgepackte Setup übergeben werden. Hier ist das Auffinden der Setup.iss am kritischsten, da z.B. bei der Angabe /f1setup.iss die setup.iss-Datei im Pfad der ausgepackten Setup-Dateien gesucht werden würde und nicht im Verzeichnis, in dem sich das gepackte Setup befindet. Eine Angabe eines absoluten Pfads ist hier unumgänglich, ggf. muss man setup.iss nach \Temp kopieren.

 

Zurück zum Anfang

Hilfe zur Microsoft DLL Hell

http://support.microsoft.com/servicedesks/fileversion/dllinfo.asp


Windows NT/2000/XP/2003 Kommando-Zeile

Trotz aller grafischen Gimmiks heutzutage kann ich meine Herkunft aus den "gute, alten, DOS-Tagen" nicht verleugnen :-))
Ein guter Dreizeiler ist schneller und einfacher als hundert Mausklicks ...

Zu Unrecht wird der NT/2000/XP Kommandozeileninterpreter weitestgehend unterschätzt, ja sogar als "DOS-Box" beschimpft!
Wer sich jedoch genauer mit den einzelnen Befehlen befasst, wird erstaunt sein, welche Verbesserungen Microsoft sich hier
hat einfallen lassen und alles trotzdem weitestgehend kompatibel mit dem guten, alten DOS geblieben ist.
Hier eine Auflistung von Befehlen, die man sich unbedingt über <Befehl> /? bzw. über die Windows Onlinehilfe anschauen soll:

 

1. FOR - der wohl am Umfangreichsten erweiterte Befehl: kann Textdateien verarbeiten, die Ausgaben von anderen NT-Befehlen weiterverarbeiten,
    Texte per Trennzeichen teilen, etc, etc, etc.

2. SET - kann nun auch rechnen, Teile aus Zeichenketten schneiden, sowie Benutzereingaben Umgebungsvariablen zuzuweisen

3. CALL - kann auch Untermodule in der gleichen Batch-Datei aufrufen, Rücksprung erfolgt mit goto :EOF

4. IF - /I zum Vergleichen von Zeichenketten ohne Berücksichtigung von Groß-/Kleinschreibung, IF DEFINED zum Prüfen, ob eine
    Umgebungsvariable definiert ist, Möglichkeit für ELSE.

5. Ein ganzes Bündel neuer, vordefinierter Umgebungsvariablen (ab Windows 2000) (%TIME%, %DATE%, %ProgramFiles%, %CD%, %RANDOM%....),
    die über SET /? erklärt werden.

6. &, &&, || - & trennt mehrere Befehle in der gleichen Zeile, || führt den folgenden Befehl nur aus, falls ERRORLEVEL > 0, && führt
    den folgenden Befehl nur aus, falls ERRORLEVEL = 0

 

Hier ein Beispiel, das ich gerne einsetze, um in einer Batch ein Protokoll mit Zeitstempel zu erstellen (nur unter Windows 2000/XP). Ggf. muss man

das Skript bei einer anderen Betriebssystem-Sprache bzw. Landeseinstellung als Deutsch modifizieren, da teilweise die Wochentagsangabe mit

ausgegeben wird:

 

:
Call :DateTime 
Echo %DATETIME% - Beginne Protokollierung... >> Protokoll.log
:
:
Call :DateTime
Echo %DATETIME% - Ende Protokollierung >> Protokoll.log
Goto :EOF
:DateTime
For /f "tokens=2" %%A in ("%DATE%") Do Set DATETIME=%%A
For /f "delims=,." %%A in ("%TIME%") Do SET DATETIME=%DATETIME% %%A
Goto :EOF

Oder (ggf. wird der Tag vor dem Datum ignoriert):

:DateTime
For /f "tokens=2" %%A in ("%DATE%") Do Set DATETIME=%%A
Rem Falls kein Wochentag angegeben ist, ist nun die Variable DATETIME nicht definiert
If not defined DATETIME Set DATETIME=%DATE%
For /f "delims=,." %%A in ("%TIME%") Do SET DATETIME=%DATETIME% %%A
Goto :EOF

Ergebnis:

 

01.09.2000 17:25:03 - Beginne Protokollierung...
01.09.2000 17:25:10 - Ende Protokollierung

 

Alternativ eine Variante, die auch unter NT 4.0 funktioniert:

:DateTime
For /f "tokens=2" %%A in ('date /t') Do Set DATETIME=%%A
For /f %%A in ('time /t') Do SET DATETIME=%DATETIME% %%A
Goto :EOF

Oder (ggf. wird der Tag vor dem Datum ignoriert):

:DateTime
For /f "tokens=2" %%A in ('date /t') Do Set DATETIME=%%A
Rem Falls kein Wochentag angegeben ist, ist nun die Variable DATETIME nicht definiert
If not defined DATETIME For /f "tokens=1" %%A in ('date /t') Do Set DATETIME=%%A
For /f %%A in ('time /t') Do SET DATETIME=%DATETIME% %%A
Goto :EOF
 

Hinweis:

Die ursprünglich hier vorgestellte Variante mit

 
Call :DateTime & Echo %DATETIME% - Beginne Protokollierung... >> Protokoll.log

 

funktioniert nicht!  Dies rührt daher, dass Variablen normalerweise bereits beim Lesen einer Zeile erweitert werden und nicht zur Laufzeit.
Meinen Dank an Diego Torres für den Hinweis!

Auch solche Konstrukte funktionieren NICHT wie erwartet:

 
SET TEST=
SET TEST=Tralala & Echo %TEST%

 

gibt %TEST% aus (also Variable %TEST% ist undefiniert) und nicht wie erwartet Tralala. Dies führt vor allem bei der Verwendung in For-Schleifen zu Problemen.

Windows 2000/XP erlaubt eine verzögerte Erweiterung der Variablen, in dem man den Kommandointerpreter (cmd.exe) mit der Option /V:ON aufruft.
Die Batch sieht dann so aus (man beachte die Ausrufungszeichen):
 
SET TEST=
SET TEST=Tralala & Echo !TEST!

 

Gibt wie erwartet Tralala aus.
 
 
Einlesen von Umgebungsvariablen aus einer zentralen Konfigurationsdatei
 
Gelegentlich möchte man mehrere Skripte auf eine gemeinsame Konfigurationsdatei zugreifen lassen,
um System-Variablen zentral zu halten und nicht jedes Mal im Kopf der Skript-Datei herumeditieren zu müssen:
 
@echo off 
:
Call :ReadConfig
:
Goto :EOF
:ReadConfig
REM Einlesen einer INI-artig aufgebauten Konfig-Datei und setzen von Umgebungsvariablen 
FOR /F "tokens=1,2 EOL=; delims==" %%A IN (Skript.cfg) DO (set %%A=%%B) 
Goto :EOF 
 
Die Datei Skript.cfg sieht dann wie folgt aus:
 
;***************************** 
;* Beispiel Skript.cfg Datei *
;*****************************
; Log-Pfad definieren
LOG=C:\Skript.log
 
; Mail-Server
SMTPSERVER=testsmtp.datapool.de 
;*****************************
 
Nach Aufruf stehen die Umgebungs-Variablen SMTPSERVER und LOG zur weiteren Verwendung zur Verfügung.
Wie am Beispiel zu sehen, werden Kommentarzeilen mit ; (Strichpunk) begonnen. Leerzeilen werden ignoriert (dürfen keine Leerzeichen oder Tabs beinhalten!).
Achtung! Im Gegensatz zu üblichen INI-Dateien reagiert diese Konfigurationsdatei empfindlich auf Leerzeichen.
Z.B. LOG = C:\Test ergibt die Umgebungsvariable %LOG % (mit Leerzeichen!) und dem Inhalt " C:\Test".
Besonders schwierig erkennt man diese Leerzeichen am Ende des Werts. Für Troubleshooting-Zwecke empfiehlt sich daher die Ausgabe der eingelesen Werte
ins Log oder auf den Bildschirm: 
 
:ReadConfig 
REM Einlesen einer INI-artig aufgebauten Konfig-Datei und setzen von Umgebungsvariablen 
For /F "tokens=1,2 EOL=; delims==" %%A IN (Skript.cfg) DO (set %%A=%%B) & (echo %%A=%%B;)
Goto :EOF
 
 
 
Zurück zum Anfang

 

 



Nachricht schicken Zurück
 
Graphics by Ann-S-Tesia
http://ann-s-thesia.com