c.boerner
Goto Top

VBS Script kann Prgramm nicht starten

Hallo ihr Admins,

Ich habe folgendes Scenarios ein Programm läuft im Hintergrund (Drivve-Image) das übergibt Werte an ein VBS Script.
Das Script soll dann ein weiteres Programm Starten (SQL Connector) der die Werte annimmt.

Folgendes Problem wen ich das VBS Script Manuel ausführe (mit werten) wird dann auch der SQL Connector gestartet und die Werte an meine SQL Datenbank übergeben.
Aber wen das gleiche Script von meinen Programmangesprochen wird, wird nicht der SQL Connector gestartet. Es kommen auch keine Fehler. Werte werden alle sauber übergeben.

Ich bin an der Stelle wo ich folgendes Getestet habe.
Einfaches VBS Script das den Editor öffnet mit einer TXT.
Manueller Start I.O.
Start durch das Programm tut sich nicht. Gleiches Script.

Vermutung und Behauptung von mir, es wird verhindern das ein Programm ein anders ProgrammStarten darf.
Weil händisch alles funktioniert nur der Start durch ein anders Programm nicht.

Gibt es eine so Einstellungsmöglich / Verhalten von Windows und wen ja wo kann ich ausnahmen und Regeln setzen, das dieses Programm andere Programme Starten darf.

SERVER 2011 SBS oder Windows 10, Viren Scanner aus, Benutzerkontensteuerung aus.

Content-Key: 306423

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

Ausgedruckt am: 19.03.2024 um 04:03 Uhr

Mitglied: emeriks
emeriks 07.06.2016 um 16:08:34 Uhr
Goto Top
Hi,
was macht Dich sicher, dass das Script überhaupt gestartet wird? Bau mal eine MsgBox unmittelbar vor dem Start des Programms aus dem Script ein, welche Dir die Kommandozeile anzeigen soll, mit welcher Du das Programm starten willst.

Probleme mit der Virtualisierung von "Program Files" <--> "Program Files x86" oder "System32" <--> "Syswow64" kannst Du ausschließen?

E.
Mitglied: C.Boerner
C.Boerner 07.06.2016 um 16:34:12 Uhr
Goto Top
Das script hat mehrer aufgaben,
1. Variablen werden richtig ermittelt = OK (XML-Testdatei)
2. Das Script wird aufgerufen = OK sonst würde die SQL.Datei nicht erzeugt werden.
3. Das Script läuft bis zum Ende = OK sonst würde die Datei nicht gelöscht werden, bei Fehlern im Script würde diese stoppen
4. Das Programm wird gestartet = Hier ist der Fehler zu suchen, wenn aus der Console klappt,

Das script wird gestardet seh ich an den abläufen in verschieden ordner.

Nur an dem Punkt wo er einanders Program Starten soll passiert nicht.
script manueler start io.
Mitglied: emeriks
emeriks 07.06.2016 aktualisiert um 16:48:05 Uhr
Goto Top
Nur an dem Punkt wo er einanders Program Starten soll passiert nicht.
Ja eben.
Habe mich selbst schon bei sowas vertan. deshalb angewöhnt, beim Debug mal die Kommandozeile ausgeben zu lassen.
Dann aus dem Script heraus prüfen, ob die Exe verfügbar ist. Usw. usw.
Nicht "denken, dass es ist ..." sondern Fakten, Fakten, Fakten ... face-wink
Poste doch mal die betreffenden Codezeilen.
Mitglied: Pjordorf
Pjordorf 07.06.2016 aktualisiert um 22:10:16 Uhr
Goto Top
Hallo,

Zitat von @C.Boerner:
Aber wen das gleiche Script von meinen Programmangesprochen wird
Wie ist es dort mit Benutzerrechten bzw. Pfaden?

Start durch das Programm tut sich nicht. Gleiches Script.
Taskplaner? Benutzer? Angemeldeter Benutzer?

Vermutung und Behauptung von mir, es wird verhindern das ein Programm ein anders ProgrammStarten darf.
Skurille Vermutung und daraus dann deine (falschen) Schlüsse ziehen?

Weil händisch alles funktioniert nur der Start durch ein anders Programm nicht.
Skurille logik!

Gibt es eine so Einstellungsmöglich / Verhalten von Windows und wen ja wo kann ich ausnahmen und Regeln setzen, das dieses Programm
andere Programme Starten darf.
Nicht das ich es kenne täten würden...

SERVER 2011 SBS oder Windows 10, Viren Scanner aus, Benutzerkontensteuerung aus.
Warum Benutzerkontensteuerung AUS? Das führt doch nur zu Problemen, deins könnte schon damit zusammenhängen....

Gruß,
Peter
Mitglied: C.Boerner
C.Boerner 08.06.2016 um 08:56:41 Uhr
Goto Top
Vieleicht habe ich mich etwas Falsch ausgedrückt?

Ich mach ein doppelklick aus das script und folgendes wird gemacht. SQL String wird geschrieben seh ich im Ordner. SQL Strig wird importiert Fenster geht aus und seh das Prgramm im Task. nach import wird Task gekielt. Schau in meine Sql Datenbank rein Sql strin am Richtigen Ort.


Set objStdOut = WScript.StdOut
'WERT1=Wscript.Arguments(0) 'Kontaktnummer aus Drivve
'WERT2=Wscript.Arguments(1) 'Dateiname aus Drivve
'WERT3=Wscript.Arguments(2) 'UID aus Drivve


WERT1="604405" 'Kontaktnummer
WERT2="C:\ESOffice\Dokumente\604405\AB_Kunde_604405" ' Dateiname
WERT3="XXXXXXX" 'UID


'####### Systemparameter #################### bitte anpassen ########################################

PFAD = "C:\TEST\" 'Pfad für die Ausgabe des Scriptes
SCRIPTDATEI=WERT3 & ".SQL"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set OFile = fso.OpenTextFile(PFAD&"\"& SCRIPTDATEI,2,true)

'######### Eigentlicher Schreibprozess #########################################

OFile.Write "Insert into einzadok values("& WERT1 & ",(select coalesce(max(posintern),0)+1 from Einzadok where EinzelaktNr=" & WERT1 & "),'" & WERT2 & ".pdf" & "')"

OFile.Close

'######### Aufruf des Programmes #########################################
'MSGBOX "PAUSE"

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run("""" & "C:\Program Files (x86)\ES2000\ESDBManagement\ESDBManagement.exe" & """" & " -a:ESWinTEST" & " -r " & PFAD & "\" & SCRIPTDATEI),7 'Eigentlicher Aufruf mit alen Variablen SQLString IMPORT in meine SQL Datenbank Fenster mit import ok geht auf

wscript.sleep 20000 'Pause 10 Sekunden
'MSGBOX "PAUSE"

WshShell.Run ("taskkill /F /IM ESDBManagement.exe") 'Prozess wird geschlossen


'######### SQL-Datei löschen #########################################
'MSGBOX "PAUSE"

FSO.DeleteFile PFAD & "\" & SCRIPTDATEI

nach ablauf dieses sciptes ist einneuer Datenbank eintrag an der richtigen Stelle und mein Programm weis das ich ein neues PDF liegt.
Bis hier alles gut.

Wenn das script von eienem Programm asugelöst wird, wird es auch abgearbeiten bis zum folgenen punkt.

WshShell.Run("""" & "C:\Program Files (x86)\ES2000\ESDBManagement\ESDBManagement.exe" & """" & " -a:ESWinTEST" & " -r " & PFAD & "\" & SCRIPTDATEI),7 'Eigentlicher Aufruf mit alen Variablen SQLString IMPORT in meine SQL Datenbank Fenster mit import ok geht nicht auf

aber ich seh im Task meine Anwendung ESDBManagement.exe
Mitglied: emeriks
emeriks 08.06.2016 um 09:11:07 Uhr
Goto Top
WshShell.Run("""" & "C:\Program Files (x86)\ES2000\ESDBManagement\ESDBManagement.exe" & """" & " -a:ESWinTEST" & " -r " & PFAD & "\" & SCRIPTDATEI),7 'Eigentlicher Aufruf mit alen Variablen SQLString IMPORT in meine SQL Datenbank Fenster mit import ok geht nicht auf  
Was soll das ",7" nach dem "SCRIPTDATEI)" sein?
Mitglied: C.Boerner
C.Boerner 08.06.2016 um 10:04:05 Uhr
Goto Top
rem Parameter
rem 0: versteckt das Fenster und aktiviert ein anderes
rem 1: aktiviert und zeigt ein Fenster
rem 2: aktiviert und minimiert das Fenster
rem 3: aktiviert und maximiert das Fenster
rem 4: zeigt das Fenster in seiner letzen Position, das aktive Fenster bleibt aktiv
rem 5: zeigt das Fenster in seiner letzen grösse und Position
rem 6: minimiert das Fenster und aktiviert ein anderes
rem 7: minimiert das Fenster, das aktive Fenster bleibt aktiv
rem 8: zeigt das Fenster in seiner letzen Position, das aktive Fenster bleibt aktiv
rem 9: stellt ein minimiertes Fenster wieder in seinen ursprünglichen Zustand
rem 10: setzt das Fenster gleich dem Programm

auch ohne zusatz keine Funktion.
Mitglied: C.Boerner
C.Boerner 08.06.2016 um 10:09:23 Uhr
Goto Top
Ich habe jetzt mal das ganze vereinfacht um das problem einzugrenzen.

einfaches Script Notepad öffnet eine TXT

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run("""" & "C:\Windows\Notepad.exe" & """" & "C:\TEST\TEST.TXT")

doppelklick auf script --> ergebnis Notepad öffnet TXT.

ein Programm startet das script

Script öffnet nicht Notepad --> im Taskmanager ist aber das Notepad zu sehen.
Mitglied: emeriks
emeriks 08.06.2016 um 10:17:08 Uhr
Goto Top
Ja, schon klar. Aber was soll das hinter der Klammer?

https://msdn.microsoft.com/en-us/library/d5fk67ky%28v=vs.84%29.aspx

So wäre richtig:
WshShell.Run("""C:\Program Files (x86)\ES2000\ESDBManagement\ESDBManagement.exe"" -a:ESWinTEST -r " & PFAD & "\" & SCRIPTDATEI, 7) 'Eigentlicher Aufruf mit alen Variablen SQLString IMPORT in meine SQL Datenbank Fenster mit import ok geht nicht auf  

Mit dieser Anpassung ...
FSO.CreateTextFile("C:\Debug.log").Write """C:\Program Files (x86)\ES2000\ESDBManagement\ESDBManagement.exe"" -a:ESWinTEST -r " & PFAD & "\" & SCRIPTDATEI  

WshShell.Run("""C:\Program Files (x86)\ES2000\ESDBManagement\ESDBManagement.exe"" -a:ESWinTEST -r " & PFAD & "\" & SCRIPTDATEI, 7) 'Eigentlicher Aufruf mit alen Variablen SQLString IMPORT in meine SQL Datenbank Fenster mit import ok geht nicht auf  
... sollte die auszuführende Zeile in eine Log geschrieben werden. Ist die Ausgabe so, wie von Dir erwartet?
Mitglied: emeriks
emeriks 08.06.2016 um 10:19:46 Uhr
Goto Top
OK, zu spät ...

Script öffnet nicht Notepad --> im Taskmanager ist aber das Notepad zu sehen.

Kann es sein, dass das Programm das Script schon versteckt aufruft? Dann wäre klar, das alle aus diesem Script gestarteten Prozesse auch versteckt sind.
Mitglied: C.Boerner
C.Boerner 08.06.2016 um 13:46:18 Uhr
Goto Top
Das ist ein guter ansatz. habe mal verschiedene Systeme genommen wo diese Programm installiert ist.
Es scheint wirklich so als ob er am Ende des Prozeses wirklich nur die exe oder Vbs versteckt ausführt.
Habe ein Test mit dem Calc gemacht er soll am ende denn Calc öffnen.
und siehe da calc fur im Task offen aber nicht sichtbar.
Jetzt wieder ein neues Problem wo ich arbeiten kann.
Wie kann mann solche Programme sichtbar machen?
Mitglied: emeriks
emeriks 08.06.2016 um 14:03:17 Uhr
Goto Top
Warum soll es denn sichtbar laufen? Es soll doch bloß was in eine DB schreiben, wenn ich das richtig verstanden habe.
Oder geht es Dir um eventuelle Fehlermeldungs-Dialoge?

Vielleicht über WMI? z.B. hier
Mitglied: C.Boerner
C.Boerner 08.06.2016 um 14:21:07 Uhr
Goto Top
und zwar wenn der DB import läuft sieht mann einmal den DB Conector und das Status Fenster vom import.
ist nur ne vermutnug das der DP import nicht versteckt ausgeführt werden kann. Und das da was schief leuft weil es vieleicht nicht versteckt sein darf???? aber das müste ich mit dem Hersteller mal abklären.
Mitglied: C.Boerner
C.Boerner 08.06.2016 um 15:20:19 Uhr
Goto Top
habe jetzt mal ein Debug von DB Conector (ESDBManagement.exe) gemacht.

wenn es silent läuft werden dann folgende zeilen nicht mehr aufgerufen

ES2000.Database.DBConfList - DBConfList.Reload:
DEBUG 1 ES2000.Database.DBConfList - dbxdrivers=C:\ESOffice\Para\dbxdrivers.ini
DEBUG 1 ES2000.Database.DBConfList - dbxconnections=C:\ESOffice\Para\dbxconnections.ini

Ist jetzt bei ES2000 (Entwickler Firma und mal sehen was die dazu schreiben.
Mitglied: C.Boerner
C.Boerner 10.06.2016 um 14:03:31 Uhr
Goto Top
Alles Gelöst,

Erkennung interaktiver Dienste war Deaktiviert. Und somit konnte das Script die Programme nicht ordnungs gemäs ausführen.