Die Lösung schreibt sich "WScript.Shell". Nach der Instantiierung stehen mir einiges an Features zur Verfügung, unter anderen eben das Ausführen von Programmen per Kommandozeilen-Übergabe. Und genau das und wie man damit mit WinZip 8.0 dynamisch ZIP-Files am Server erzeugen kann, ist das Thema in diesem Artikel.
Im Grunde sieht das Grundgerüst an Code so aus:
set oShell = Server.CreateObject("Wscript.Shell") oShell.Run <Datei-Name>, 0, True set oShell = nothing |
Wofür steht jetzt eigentlich das "True" ?
Es steht für "blnWaitOnReturn" - kurz: Das True sorgt dafür, dass auf das Terminate-Erreignis des Commando-Zeilen-Befehls gewartet wird, Und somit das ASP-Script erst weiter ausgeführt wird, bis "Wscript.Run" wirklich fertig ist! Standard ist der Wert False. Da aber das Zippen(im Beispiel unten) evtl. mehr Zeit braucht, als das ASP-Script. Sollte hier auf alle Fälle True verwendet werden.
Und was heisst hier 0 ?
Der Wert 0 steht für die Art der Anzeige des Commando-Fenster nähmlich "unsichtbar". Das braucht uns als ASP-Programmierer allerdings nicht zu interessieren, weil die Anzeige ja Server-Seitig ist. Außerdem ist 0 der Standard-Wert und muss also nicht angegeben werden.
Jetzt zum Beispiel:
In diesem Beispiel wird gezeigt, wie man Dateien auf dem Server über ASP-Script mit WinZip 8.0 zippen kann. WinZip 8.0 hat ein paar Zusatz-Programme unter anderen eben die Winzip 8.0 Befehlszeilen-Erweiterung. Mit dieser können wir per Wscript-Shell WinZip zum Zippen von beliebigen Dateien veranlassen. Hier finden Sie WinZip und Zubehör...
http://www.winzip.de
Die Kommando-Zeilen-Info´s von WinZip werden erst in eine TXT-Datei geschrieben. Dazu muss man das DOS-Command ">FileName.txt" verwenden. Danach kann ich diese TXT-Datei mit dem Scripting-FileSystemObject auslesen. Jetzt habe ich die Info´s meines ZIP-Vorgangs ausgelesen und kann dieses Ergebnis so auf eine ASP-Seite zur Ausgabe puschen.
Hier zippe ich alle Text-Dateien in das Zip-File "MyFile.ZIP".
WICHTIG:
Dieses Script funktioniert nur mit der Lizenzierten-Version von WinZip 8.0!!!
<% '--- Funktions-Aufruf mit Parameter-Übergabe Info = Zipper("MyFile.ZIP","*.txt") '--- Ausgabe der ZIP-Info Response.Write Info Function Zipper(ZIPFile,FilesToZIP) '--- Variablen(Name des Zip-Files, Namen der zu zippenden Files usw...) zu weisen sPath = Server.MapPath("./") sWZZIPexe = sPath & "\WZZIP.EXE" sZIPFile = sPath & "\" & ZIPFile sZIPThis = sPath & "\" & FilesToZIP '--- TempName für Info-Ausgabe bestimmen set oFSO = Server.CreateObject("Scripting.FileSystemObject") sFileName = sPath & "\" & oFSO.GetTempName sFileName = Replace(sFileName,"tmp","txt") '--- Wscript-Shell instantiieren und das DOS-Command mit Parametern-Übergeben set oShell = Server.CreateObject("Wscript.Shell") oShell.Run "cmd /c " & sWZZIPexe & " " & sZIPFile & " " & sZIPThis >" & sFileName, , True set oShell = nothing '--- Die ZIP-Info-Datei auslesen set oFile = oFSO.OpenTextFile(sFileName,1) do until oFile.AtEndOfStream x = x & oFile.ReadLine & "<br>" loop set oFile = nothing '--- ZIP-Info-Datei löschen set oFile = oFSO.GetFile(sFileName) oFile.Delete set oFile = nothing '--- Dem Funktions-Namen die ZIP-Info zu weisen Zipper = x End Function %> |
Der WZZIP.exe oder WZUNZIP.exe können einige zusätzliche "winzip-eigene" Parameter übergeben werden, die z.B. bewirken...
- folgende Dateien nicht zippen...
- ZIP-Commentare erstellen
- Unterverzeichnisse auch zippen usw...
Informationen hierzu finden sie auf
http://www.winzip.de Der Code steht natürlich zum Download unten. Die WZZIP.EXE und WZUNZIP.EXE sind rechtlich geschützt und dürfen nicht weitergeben werden.