Tipps
Windows RunDLL32/RunDLL Funktionen32-bit-Funktionen: Aufruf mit RunDLL32 <dll>,<Parameter1>,<Parameter2> ...
16-bit-Funktionen: Aufruf mit RunDLL <dll>,<Parameter1>,<Parameter2> ...
Weitere Infos unter: http://support.microsoft.com/support/kb/articles/Q164/7/87.ASPZurück zum AnfangInstallshield 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 AnfangHilfe zur Microsoft DLL Hellhttp://support.microsoft.com/servicedesks/fileversion/dllinfo.asp Windows NT/2000/XP/2003 Kommando-ZeileTrotz
aller grafischen Gimmiks heutzutage kann ich meine Herkunft aus den "gute,
alten, DOS-Tagen" nicht verleugnen :-)) Zu
Unrecht wird der NT/2000/XP Kommandozeileninterpreter weitestgehend unterschätzt,
ja sogar als "DOS-Box" beschimpft!
1. FOR -
der wohl am Umfangreichsten erweiterte Befehl: kann Textdateien verarbeiten, die
Ausgaben von anderen NT-Befehlen weiterverarbeiten, 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 5. Ein
ganzes Bündel neuer, vordefinierter Umgebungsvariablen (ab Windows 2000) (%TIME%, %DATE%, %ProgramFiles%,
%CD%, %RANDOM%....), 6. &, &&,
|| - & trennt mehrere Befehle in der gleichen Zeile, || führt den folgenden
Befehl nur aus, falls ERRORLEVEL > 0, && führt
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. 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
|