VBScript startet exeDatei als Prozess
Hallo und einen wunderschönen Montagmorgen.
Seit ein paar Tagen schlage ich mich mit folgendem Problem herum:
Ich habe ein vbs Skriptdatei, welche auf einem Rechner prüft, ob bestimmte Dateien vorhanden sind. Ist dies der Fall, so soll ein exe Programm zur Verarbeitung gestartet werden. Der entsprechende Abschnitt für eine Datei sieht so aus:
If (fso.FileExists("C:\AMIC\KS_order.txt")) Then
Ursprung = "C:\Amic\KS_order.txt"
praefix = "KO"
ZPfad = "C:\Amic\SIC\"
Kopie
' Zuerst wurde eine Sicherungskopier erstellt
Schalter=Schalter+1
Set objShell = WScript.CreateObject("WScript.Shell")
ergebnis=objShell.Run("""" & "C:\Amic\EDIAEINS_a.exe" & """",,True)
End If
Da es mehrere veschiedene Dateien sein können taucht dieser Abschnitt mehrfach auf. Wurde dabei eine Datei gefunden und verarbeitet, so wird ein weiteres Programm gestartet:
If Schalter > 0 Then
Set objShell = WScript.CreateObject("WScript.Shell")
ergebnis=objShell.Run("""" & "P:\bin\Aeins.exe welcomexxx user=xxx passwort=xxx makro=Aa_EDI_Import" & """",,True)
End If
WScript.Quit
Das Skript wird über die Aufgabenplanung stündlich, unabhängig von der Benutzeranmeldung, als Administrator mit gespeichertem Passwort und höchsten Privilegien aufgerufen.
Betriebssystem ist win Server 2012
Unter Windows XP wurde das Programm 'EDIAEINS_a.exe' noch korrekt gestartet. Nun wird 'EDIAEINS_a.exe' als Prozess gestartet und der Vorgang bleibt hängen und wird wegen
--->strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'EDIAEINS_a.exe'")
For Each objProcess In colProcessList
WScript.quit
Next<---
bei Skriptstart auch nie wieder ausgeführt.
Hat mir vielleicht jemand einen Tipp, wie ich die Sache zum Laufen bekommen könnte?
Seit ein paar Tagen schlage ich mich mit folgendem Problem herum:
Ich habe ein vbs Skriptdatei, welche auf einem Rechner prüft, ob bestimmte Dateien vorhanden sind. Ist dies der Fall, so soll ein exe Programm zur Verarbeitung gestartet werden. Der entsprechende Abschnitt für eine Datei sieht so aus:
If (fso.FileExists("C:\AMIC\KS_order.txt")) Then
Ursprung = "C:\Amic\KS_order.txt"
praefix = "KO"
ZPfad = "C:\Amic\SIC\"
Kopie
' Zuerst wurde eine Sicherungskopier erstellt
Schalter=Schalter+1
Set objShell = WScript.CreateObject("WScript.Shell")
ergebnis=objShell.Run("""" & "C:\Amic\EDIAEINS_a.exe" & """",,True)
End If
Da es mehrere veschiedene Dateien sein können taucht dieser Abschnitt mehrfach auf. Wurde dabei eine Datei gefunden und verarbeitet, so wird ein weiteres Programm gestartet:
If Schalter > 0 Then
Set objShell = WScript.CreateObject("WScript.Shell")
ergebnis=objShell.Run("""" & "P:\bin\Aeins.exe welcomexxx user=xxx passwort=xxx makro=Aa_EDI_Import" & """",,True)
End If
WScript.Quit
Das Skript wird über die Aufgabenplanung stündlich, unabhängig von der Benutzeranmeldung, als Administrator mit gespeichertem Passwort und höchsten Privilegien aufgerufen.
Betriebssystem ist win Server 2012
Unter Windows XP wurde das Programm 'EDIAEINS_a.exe' noch korrekt gestartet. Nun wird 'EDIAEINS_a.exe' als Prozess gestartet und der Vorgang bleibt hängen und wird wegen
--->strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'EDIAEINS_a.exe'")
For Each objProcess In colProcessList
WScript.quit
Next<---
bei Skriptstart auch nie wieder ausgeführt.
Hat mir vielleicht jemand einen Tipp, wie ich die Sache zum Laufen bekommen könnte?
Please also mark the comments that contributed to the solution of the article
Content-Key: 342925
Url: https://administrator.de/contentid/342925
Printed on: April 24, 2024 at 20:04 o'clock
8 Comments
Latest comment
Zusätzlich:
Wenn Du den Taskplaner verwendest, musst Du damit rechnen, dass Anwendungen, die ohne Fenster auskommen können, dennoch starten.
Übrigens hinter jeder Anwendung steckt immer ein Prozess. Deiner wird ohne Fenster nur zu einem Zombie.
Ich sehe da zwei Möglichkeiten:
Alternative:
Wenn Dein Script nur getriggert werden soll, wenn sich in einem bestimmten Verzeichnis etwas ändert (Datei kommt hinzu), dann empfehle ich Dir das hier: https://sourceforge.net/projects/fwutilities/?source=directory
Die nutze ich. Du installierst den Dienst und baust die Konfigdatei über die Oberfläche. Ist gewöhnungsbedürftig, funktioniert aber wie die Sau und läuft ressourcenschonend immer im Hintergrund als echter Windowsdienst. Dann kämst Du von "geplanten Tasks" runter.
Eine der beiden oben angegebenen Möglichkeiten, musst Du dennoch implementieren, fürchte ich.
Wenn Du den Taskplaner verwendest, musst Du damit rechnen, dass Anwendungen, die ohne Fenster auskommen können, dennoch starten.
Übrigens hinter jeder Anwendung steckt immer ein Prozess. Deiner wird ohne Fenster nur zu einem Zombie.
Ich sehe da zwei Möglichkeiten:
- Mach ne automatische Anmeldung und lass das Script im Nutzerkontext über den Taskplaner laufen.
- Füge in Dein Script einen Taskkiller ein. Ginge auch.
Alternative:
Wenn Dein Script nur getriggert werden soll, wenn sich in einem bestimmten Verzeichnis etwas ändert (Datei kommt hinzu), dann empfehle ich Dir das hier: https://sourceforge.net/projects/fwutilities/?source=directory
Die nutze ich. Du installierst den Dienst und baust die Konfigdatei über die Oberfläche. Ist gewöhnungsbedürftig, funktioniert aber wie die Sau und läuft ressourcenschonend immer im Hintergrund als echter Windowsdienst. Dann kämst Du von "geplanten Tasks" runter.
Eine der beiden oben angegebenen Möglichkeiten, musst Du dennoch implementieren, fürchte ich.
Hi,
Ich gehe davon aus, dass Du das Script unter Win2012 unverändert gegenüber WinXP weiternutzt? Weil sonst macht dieser Vergleich keinen Sinn und lenkt nur ab.
Was passiert, wenn Du das Script manuell als Administrator startest?
E.
- Nutze bitte Code-Tags! Sonst kann das ja keiner lesen ...
- Eigentlich wie @beidermachtvongreyscull schon schreibt. Aber ich würde das Script jetzt nicht gleich ändern. Statt desse herausbekommen, warum dieser Pozess unter Win2012 (nicht "R2" ?) hängenbleibt.
Ich gehe davon aus, dass Du das Script unter Win2012 unverändert gegenüber WinXP weiternutzt? Weil sonst macht dieser Vergleich keinen Sinn und lenkt nur ab.
Was passiert, wenn Du das Script manuell als Administrator startest?
E.
Dass das Script hängen bleibt, liegt am konkreten Shell.Run Kommando: Mit "True" als letzten Parameter weist Du an, dass auf die Beendigung des Prozess gewartet werden soll. Die Ursache bielbt also diese EXE.
Ich würde jetzt zum Test den Aufruf ändern,
- die Aufgabe nicht "unabhängig von der Anmeldung" sonden nur wenn der Benutzer angemeldet ist
- beim Shell.Run den Prozess sichtbar starten
beachte "...,1,True)"
Dann die Aufgabe manuell starten. Jetzt müsste das Script die EXE sichtbar starten und Du kannst sehen, was diese macht. (Die EXE hat doch eine GUI oder Konsole?)
Ich würde jetzt zum Test den Aufruf ändern,
- die Aufgabe nicht "unabhängig von der Anmeldung" sonden nur wenn der Benutzer angemeldet ist
- beim Shell.Run den Prozess sichtbar starten
ergebnis=objShell.Run("""" & "C:\Amic\EDIAEINS_a.exe" & """",1,True)
Dann die Aufgabe manuell starten. Jetzt müsste das Script die EXE sichtbar starten und Du kannst sehen, was diese macht. (Die EXE hat doch eine GUI oder Konsole?)
Wenn ich den Job in der Aufgabenplanung mit dem vorgeschlagenen Parameter manuell starte erhalte ich nun einen Dateizugriffsfehler.
Es muss sich dabei um den Zugriff auf die Datenbank des Warenwirtschaftssystems handeln. Das scheint nun ein ODBC Problem zu sein.
Was macht Dich da so sicher? "Datei" ist ungleich "Daten". Nur mal so.Es muss sich dabei um den Zugriff auf die Datenbank des Warenwirtschaftssystems handeln. Das scheint nun ein ODBC Problem zu sein.
Weiterhin: Schon mal mit dem Process Monitor mitgeschnitten?