DevTrain

Autor: Bernhard Elbl

Programme auf dem Server ausführen(und somit Dateien zippen)

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.


Erfasst am: 18.07.2001 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=489
© Copyright 2003 ppedv AG - http://www.ppedv.de