curbal
Goto Top

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?

Content-Key: 342925

Url: https://administrator.de/contentid/342925

Printed on: April 24, 2024 at 20:04 o'clock

Member: beidermachtvongreyscull
beidermachtvongreyscull Jul 10, 2017 at 09:17:05 (UTC)
Goto Top
Warum so?
ergebnis=objShell.Run("""" & "C:\Amic\EDIAEINS_a.exe" & """",,True)  

Warum nicht so?
ergebnis=objShell.Run("C:\Amic\EDIAEINS_a.exe", True)  
Member: beidermachtvongreyscull
beidermachtvongreyscull Jul 10, 2017 at 09:22:48 (UTC)
Goto Top
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:
  • 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.
Member: emeriks
emeriks Jul 10, 2017 at 16:42:48 (UTC)
Goto Top
Hi,
  1. Nutze bitte Code-Tags! Sonst kann das ja keiner lesen ...
  2. 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.
Member: curbal
curbal Jul 11, 2017 at 07:13:13 (UTC)
Goto Top
Hallo,
vielen Dank für Eure Antworten.
Ich glaube, dass der wesentliche Knackpunkt die Aufgabenplanung ist.
Dabei macht es keinen Unterschied, ob ich als Administrator angemeldet bin und die Aufgabe im Planer starte
oder ob ich abgemeldet bin und der Job automatisch von der Aufgabenplanung gestartet wird. Die Ergebnisse sind identisch: Skript und die erste exeDatei hängen im Taskmanager unter 'Hintergrundrozesse' fest.
Wenn ich das Skript manuell starte (Doppelklick auf die vbsDatei) dann läuft der komplette Job reibungslos durch, die exeDateien erscheinen unter 'Apps' und verschwinden nach Abarbeitung auch wieder.
Betriebssystem ist tatsächlich Windows Server 2012 R2.
Ich weiß jetzt einfach nicht mehr, wo ich weitersuchen soll.
Habt Ihr noch einen Tipp?
Member: emeriks
emeriks Jul 11, 2017 updated at 07:39:07 (UTC)
Goto Top
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
ergebnis=objShell.Run("""" & "C:\Amic\EDIAEINS_a.exe" & """",1,True)  
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?)
Member: curbal
curbal Jul 17, 2017 at 09:58:22 (UTC)
Goto Top
Hallo, und vielen Dank für den Tipp.
Wegen Krankheit konnte ich leider nicht füher antworten.
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.
Ich frage mich dabei allerdings, warum es beim Direktstart des Skriptes klappt und beim manuellen Start über die Aufgabenplanung nicht.
Nochmals vielen Dank für Eure Hilfe
Curt
Member: emeriks
emeriks Jul 17, 2017 at 10:02:42 (UTC)
Goto Top
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.

Weiterhin: Schon mal mit dem Process Monitor mitgeschnitten?
Member: curbal
curbal Jul 19, 2017 at 12:01:47 (UTC)
Goto Top
Zitat von @emeriks:

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.

Das sagt der Support vom Hersteller des Warenwirtschaftssystems. Von dem habe ich aber seit letzter Woch auch nichts mehr gehört (sie seien gerade sehr beschäftigt).

Weiterhin: Schon mal mit dem Process Monitor mitgeschnitten?
Danke für den Tipp. Werde ich morgen mal ausprobieren.
Danke für Deine Hlfe.
Curt