Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

WSH Prozess parallel ausführen und beenden

Frage Entwicklung

Mitglied: cim

cim (Level 1) - Jetzt verbinden

18.05.2006, aktualisiert 18.09.2006, 13151 Aufrufe, 4 Kommentare

anderes Script starten und ohne Fehler beenden

Hallo,
wie kann ein WSH-Script ein anderes ausführen und ohne Fehlermeldung beenden?

Hintergrund:
Fortschrittsanzeige für Dateien kopieren

meine bisherige Lösung:

'ScriptEins
set WshShell = wscript.createobject("WScript.shell")
...
set oexec = wshshell.exec("wscript.exe c:\ScriptZwei.vbs")
...
oexec.terminate

ScriptEins kopiert die Dateien
ScriptZwei startet den Internet Explorer für die Fortschrittsanzeige, bei der es ausreicht, dass der User eine Änderung sieht

Nach terminate kommt eine Fehlermeldung "ungültiges Fensterhandle".
Ich vermute, dass ScriptEins zwar ScriptZwei beendet, aber der IE mit der Anzeige dabei seinen Prozess verliert.

Könnte das der Fehler sein?
Wie kann ich den IE von ScriptZwei beenden?
Oder muss ich ScriptZwei anders aufrufen, um es wieder einwandfrei beenden zu können (vielleicht über WshShell.Run Command)?

Vielen Dank!
Mitglied: Biber
07.08.2006 um 20:02 Uhr
Moin cim,

wie Du an der Anzahl der Aufrufe dieser Frage siehst, ist schon gewisses Interesse da.
Aber anscheinend reichen die vorliegenden Information nicht aus, um Dir schlaue Tipps zu geben.

Deshalb bleibt es wieder am Mod hängen.. *seufz*

Rückfragen:
1) besteht das Problem noch oder hast Du es inzwischen selbst gelöst? Wenn ja, wie?
2) Bis zur Aussage "IE starten, um dessen Fortschrittsanzeige zu nutzen" konnte ich Dir gedanklich noch folgen. Aber:
Wenn Du eine Fortschrittsanzeige anzeigst, WTF treibt Dich dann zum .Terminate??
In meiner eher beschränkten Phantasie wäre der gottgegebene erwartete Ablauf, dass das handle ( das doch vermutlich ein handle = CreateObject("InternetExplorer.Application") ist ??) vor sich hin fortschrittsbalkt, so lange kein Error und ReadyState<>4 (Loaded) ist.
Und sich in einem dieser Fälle gefälligst selbst beendet mit WScript.Quit.

Du aber scheinst den Fortschrittsbalken zu starten und irgendwann die aufrufende Hülsenfunktion ("Skript2.vbs") abzuschießen?
Wie kommunizieren denn bei Dir das "arbeitende" (z.B. kopierende) Skript und die "anzeigende" (IE-Laufbalkenzeugs)-Funktion?

Womit ich bei der letzten Frage wäre:
3) Magst Du vielleicht die beiden Schnipsel mal posten?
Habe mich vorher vergewissert, dass unterhalb dieses Kommentars noch ca. 273cm Platz auch für längere Codefragmente wären.
Also keine Scheu.

Grüße
Biber
Bitte warten ..
Mitglied: cim
08.08.2006 um 07:07 Uhr
Moin Biber,
sorry, dass ich erst jetzt antworte, aber ich habe die Scripte noch mit ein paar Kommentaren versehen.
Und vielen Dank für die Hilfe!

Ich suche hier gerade etwas, wie ich Dateien anhängen kann ... äh ... aber das geht wohl nur im Beitrag und nicht in Antworten. Wiedemauchsei - dann brauche ich wohl die 273 cm.

Das Problem besteht immer noch. Da ich aber kein Erste-Reihe-Vorne-Sitzer bin und ich Programmieren nicht wirklich gelernt habe, habe ich ein wenig geschummelt:
Das Main-Programm erstellt ein Verzeichnis und startet den Laufbalken (sorry, nur ein Zähler, aber immerhin). Laufbalken schließt sich selbst, wenn Main das Verzeichnis gelöscht hat. Nicht elegant, aber tut.

Aus irgenwelchen Gründen wurden bei mir zwar die Scripte über Quit beendet, allerdings hatte ich im Taskmanager noch die Prozesse (das beim Testen ziemlich ätzend wurde). Daher "terminate". Habe ich aus einem Buch "Inside Windows Script Host".

Variablen mit q haben etwas mit der Quelle zu tun, z = Ziel. Ich hoffe, dass sich durch die Formatierungen die Kommentare nicht allzu sehr verschoben haben.

Und überhaupt: was ist WTF? WZT hätte ich mir noch denken können...

Also schon Mal vielen Dank!
Schöne Grüße!

01.
'MAIN##################################################### 
02.
Option Explicit			'Variablen müssen definieren werden 
03.
 
04.
KopieStart()			 
05.
'Programmaufruf, weil "exit" sonst nicht möglich und Prozess nicht schließt 
06.
 
07.
'_______________________________________________________________________ 
08.
function KopieStart 
09.
 
10.
dim fso, explorer, WshShell, oExec 
11.
dim start, ende, zeit 
12.
dim Datum, Monat, Tag 
13.
dim ie, liste, listeIE, Schreibschutz, nummer, i, j, StatusOrdner 
14.
dim z_verz, z_expl, z_datei 
15.
dim q_datei, q_verz, q_expl, q_liste 
16.
'dim netzwerk 
17.
 
18.
set fso = wscript.CreateObject("Scripting.FileSystemObject")									'open file-scripting 
19.
'set netzwerk = wscript.createobject("wscript.network") 
20.
set explorer = wscript.createobject("shell.application") 
21.
set WshShell = wscript.createobject("WScript.shell") 
22.
 
23.
if msgbox("SOLL DIE SICHERUNG DER DATEN JETZT GESTARTET WERDEN?", vbyesno + vbinformation, "DATEIEN KOPIEREN") = vbno then exit function 
24.
 
25.
monat = month(date)													'Datum für Verzeichnisnamen 
26.
if month(date) < 10 then monat = "0" & month(date) 
27.
tag = day(date) 
28.
if day(date) < 10 then monat = "0" & day(date) 
29.
datum = year(date) & "_" & monat & "_" & tag 
30.
start=timer 
31.
liste=" " 
32.
listeIE=" " 
33.
nummer=0 
34.
schreibschutz = 0 
35.
 
36.
set q_expl = explorer.BrowseForFolder(&H0,"Bitte QUELL-Ordner auswählen:",&H01 ,17)  
37.
if q_expl = "" or isnull(q_expl) then exit function		'Wenn Abbrechen dann Exit 
38.
q_verz = q_expl.parentfolder.parsename(q_expl.title).path & "\"								'den gesamten Ziel-Pfad ermitteln 
39.
set q_liste = fso.getfolder(q_verz) 
40.
 
41.
set z_expl = explorer.BrowseForFolder(&H0,"Bitte ZIEL-Ordner auswählen:",&H01 ,17)  
42.
if z_expl = "" or isnull(z_expl) then exit function											'Wenn Abbrechen dann Exit 
43.
z_verz = z_expl.parentfolder.parsename(z_expl.title).path & "\" & datum & "\"						'den gesamten Ziel-Pfad ermitteln 
44.
fso.createfolder(z_verz) 
45.
 
46.
set ie = wscript.createobject("InternetExplorer.Application", "event_")							'Internet Explorer für Ablauf 
47.
ie.navigate ("javascript:'<title>Sicherung</title><body scroll=no>Sicherung von Dateien und Verzeichnissen</body>'") 
48.
ie.width=500 
49.
ie.height=250 
50.
ie.toolbar=false 
51.
ie.statusbar=false 
52.
ie.visible=true 
53.
do 
54.
loop while ie.readystate <> 4 
55.
ie.document.body.innerhtml = "Sicherung wird gestartet" 
56.
 
57.
fso.createfolder "c:\temp\XYZSaveStatusABC"									'Ordner anlegen für Prüfung, ob Laufbalken ausgeführt wird 
58.
set StatusOrdner=fso.getfolder("c:\temp\XYZSaveStatusABC") 
59.
wscript.sleep 100 
60.
 
61.
set oexec = wshshell.exec("wscript.exe c:\laufbalken.vbs")					'Aufruf Laufbalken-Script 
62.
 
63.
set q_datei = q_liste.files 
64.
for each i in q_datei 
65.
	if i.attributes = 1 then schreibschutz = schreibschutz +1 
66.
	liste =  i & vbcrlf	& liste  
67.
	listeIE =  i & " 
68.
" & listeIE  
69.
	ie.document.body.innerhtml = listeIE 
70.
	nummer=nummer+1 
71.
	fso.CopyFile i, z_verz, true 
72.
next 
73.
 
74.
set q_datei = q_liste.subfolders 
75.
for each j in q_datei 
76.
	if j.attributes = 1 then schreibschutz = schreibschutz +1 
77.
	liste =  j & vbcrlf	& liste  
78.
	listeIE =  j & " 
79.
" & listeIE  
80.
	ie.document.body.innerhtml = listeIE 
81.
	nummer=nummer+1 
82.
	fso.Copyfolder j, z_verz, true 
83.
next 
84.
 
85.
statusOrdner.delete		'Verzeichnis löschen, damit Laufbalken beendet 
86.
 
87.
ende = timer 
88.
zeit = round(ende-start,3) 
89.
ie.quit 
90.
 
91.
'oexec.terminate  
92.
'do while oexec.status=0 
93.
'	wscript.sleep 200											'Warten, sonst Laufzeitfehler 
94.
'loop 
95.
 
96.
msgbox "Kopieren von " & nummer & " Dateien beendet!" & vbcrlf & schreibschutz & " schreibgeschützte Dateien wurden nicht übertragen." & _ 
97.
	vbcrlf & vbcrlf & liste, 0+64, "Fertig nach " & zeit & " Sekunden" 
98.
 
99.
wscript.quit		'trotzdem bleibt Prozess bestehen???, deshalb "exit function" 
100.
oexec.terminate 
101.
exit function 
102.
 
103.
end function 
104.
'#########################################################
..und das zweite Skript "c:\Laufbalken.vbs"
01.
'LAUFBALKEN################################################# 
02.
Option Explicit 
03.
 
04.
dim ieFort, zahl, fso 
05.
 
06.
set fso = wscript.CreateObject("Scripting.FileSystemObject")									'open file-scripting 
07.
 
08.
set ieFort = wscript.createobject("InternetExplorer.Application", "event_")							'Internet Explorer für Ablauf 
09.
ieFort.navigate ("javascript:'<title>In Arbeit...</title><body scroll=no>gestartet</body>'") 
10.
ieFort.width=150 
11.
ieFort.height=100 
12.
ieFort.left=100 
13.
ieFort.toolbar=false 
14.
ieFort.statusbar=false 
15.
ieFort.visible=true 
16.
 
17.
do 
18.
loop while ieFort.readystate <> 4 
19.
ieFort.document.body.innerhtml = "Status" 
20.
 
21.
do while (fso.folderexists("c:\temp\XYZSaveStatusABC\"))					'Darf ich weitermachen? 
22.
	zahl = zahl +1 
23.
	wscript.sleep 100 
24.
	ieFort.document.body.innerhtml = zahl 
25.
loop 
26.
iefort.quit 
27.
wscript.quit 
28.
 
29.
'#########################################################
[Edit] Formatierung auf <code> gesetzt. Biber
[/Edit]
Bitte warten ..
Mitglied: Biber
24.08.2006 um 00:25 Uhr
Moin cim,

nach längerer Pause mal wieder eine kurze Zwischenmeldung.

Zwischenmeldung, weil eine saubere Antwort doch ein bisschen mehr Zeit brauchen würde.

Aber ein paar Anmerkungen möchte ich doch schon jetzt loswerden, auch wenn es keine umfassende "Antwort" im eigentlichen Sinne wird.

Ich fang mal unsortiert an.
Worauf ich mich nicht einlassen werde, ist die im Tiel formulierte Frage. ("WSH Prozess parallel ausführen und beenden").
Mag auch ein interessantes Thema sein, aber Prozesse, die sich gegenseitig starten und gegenseitig abschießen, das ist eher was für RobotWars oder ähnliches.
So würde ich keine Gebrauchs-Applikation aufziehen.

Ich nehme lieber den Fokus: "Internet-Explorer-Funktionen für eigene Zwecke nutzen" ohne den (kompletten) Explorer anzuzeigen.

Dazu reicht allerdings ein Öffnen einer (weiteren) Explorer-Instanz im vorhandenen Skript - es ist kein zweites Skript nötig.
Beispiel:
01.
'LAUFBALKEN################################################# 
02.
Option Explicit 
03.
 
04.
dim ieFort, zahl, fso 
05.
 
06.
set fso = wscript.CreateObject("Scripting.FileSystemObject")                                    'open file-scripting 
07.
 
08.
set ieFort = wscript.createobject("InternetExplorer.Application")          'Internet Explorer für Ablauf 
09.
'ieFort.navigate ("javascript:'<title>In Arbeit...</title><body scroll=no>gestartet</body>'") 
10.
ieFort.navigate "f:\VBS_Beispiele\Laufbalken\biber.htm" 
11.
ieFort.width=150 
12.
ieFort.height=100 
13.
ieFort.left=100 
14.
ieFort.toolbar=false 
15.
ieFort.statusbar=false 
16.
ieFort.visible=true 
17.
 
18.
do 
19.
loop while ieFort.readystate <> 4 
20.
ieFort.document.body.innerhtml = "Status" 
21.
on Error resume next 
22.
do while (zahl < 200) '(fso.folderexists("d:\temp"))                    'Darf ich weitermachen? 
23.
    zahl = zahl +1 
24.
    wscript.sleep 100 
25.
    ieFort.document.body.innerhtml = zahl 
26.
    'if err <> 0 then Wscript.Quit   
27.
 
28.
loop 
29.
iefort.quit 
30.
wscript.quit 
31.
 
32.
'#########################################################
An diesem Testschnipsel sind mir -im Vergleich mit Deinem Ansatz- wichtig:
- ich rufe als Seite eine lokale Seite "f:\VBS_Beispiele\Laufbalken\biber.htm" auf.
Die ist vollkommen leer (0 Byte groß). Aber, da sie eben eine lokale Site ist, "darf" ich auch nach dem neueren IE-Security-Patches so etwas wie
01.
ieFort.document.body.innerhtml
..ändern. Ist sonst nämlich tabu - ebenso wie Deine "javascript"-Aufrufe.
Hat mir mein relativ aktuell gepatchter IE sofort um die Ohren gehauen bzw Sicherheitswarnungen vor der Ausführung gebracht.

Ebenso kann ich natürlich z.B. den "Title" oder den "Seiteninhalt" tatsächlich in der lokalen *.htm-Seite als normalen HTML-Text hinterlegen oder aber statt einer echten Seite einfach "about:blank" aufrufen.

Neben der "Zwei-Parallel-Skript-Strategie" und den "javascript"-Funktionen ist das Dritte, was IMHO suboptimal ist, Dein zweiter Parameter im IE-Instanz-initialisieren.
01.
set ie = wscript.createobject("InternetExplorer.Application", "event_") 
Wenn Du diesen zwiten Parameter "event_" angibst, sagst Du damit, dass Du eine vorhandene EventHandler-Methode durch eine "eigene" ersetzen willst - die muss also die gleichen Inputparameter und die gleichen Rückgabewerte haben wie die Standard-Eventhandler.
Und auch den gleichen Namen, aber mit den angegebenen Prefix ("event_") davor.

Das brauchst Du aber jetzt noch gar nicht - vielleicht später mal, wenn Du eine ProgressBar einbauen willst. Im Moment kannst (und musst meiner Meinung nach) Du den zweiten Parameter weglassen.

Grüße
Biber
Bitte warten ..
Mitglied: cim
18.09.2006 um 12:49 Uhr
Hallo,
entschuldige, dass ich mich nicht gemeldet habe.
War im Urlaub und habe jetzt Arbeit bis zum Hals.
So bald ich dazu komme, probiere ich Deine Lösung und melde mich.
Danke und schöne Grüße!
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows Server
gelöst Prozess immer in Echtzeit ausführen. Server 2012 R2 (14)

Frage von zeroblue2005 zum Thema Windows Server ...

Batch & Shell
gelöst Bestimmten wscript.exe Prozess beenden (6)

Frage von Knuefi zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...