Author | Topic: Runshell, Betriebssystemfehler 87 | |
---|---|---|
![]() | Steffen Schubert | Runshell, Betriebssystemfehler 87 on Thu, 15 Jan 2015 15:57:53 +0100 Hallo, Problem: Xbase++ - Programm auf Terminalclient: Bei der Benutzung der Clients auf einem speziellen Terminalserver mit Windows 2008 Server tritt völlig aus heiterem Himmel (bis heute Mittag ging es noch) folgendes Problem auf: Alle Runshell() - Aufrufe mit "/C START ...." bringen den DOS-Fehler 87 (invalid Parameter). Alle anderen PCs und TCs funktionieren ordentlich. Auch ein Neustart des Servers hat nichts gebracht. Hat jemand schon mal dieses Problem gehabt bzw. weiss jemand eine Lösung? Mit freundlichen Grüßen Steffen Schubert |
![]() | Werner Martl | Re: Runshell, Betriebssystemfehler 87 on Sun, 18 Jan 2015 20:49:12 +0100 Am 15.01.2015 15:57, schrieb Steffen Schubert: > Hallo, > > Problem: Xbase++ - Programm auf Terminalclient: > > Bei der Benutzung der Clients auf einem speziellen Terminalserver mit > Windows 2008 Server tritt völlig aus heiterem Himmel (bis heute Mittag > ging es noch) folgendes Problem auf: > Alle Runshell() - Aufrufe mit "/C START ...." bringen den DOS-Fehler 87 > (invalid Parameter). > Alle anderen PCs und TCs funktionieren ordentlich. Auch ein Neustart des > Servers hat nichts gebracht. > Hat jemand schon mal dieses Problem gehabt bzw. weiss jemand eine Lösung? > > Mit freundlichen Grüßen > Steffen Schubert Servus Steffen, ja, gib den kompletten Pfad des aufrufenden Programmes an, dann sollte es funktionieren. Beste Grüße, Werner |
![]() | Matej Jurac | Re: Runshell, Betriebssystemfehler 87 on Mon, 19 Jan 2015 13:57:53 +0100 Ein 'Helfer', nicht uber RunShell, sondern uber ShellExecuteA, ist auch fur's Dokumenten geeinigt und print, edit, etc. http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153%28v=vs.85%29.aspx //modes for run, 0 and 1 most used #define SW_HIDE 0 #define SW_NORMAL 1 #define SW_SHOWMINIMIZED 2 #define SW_SHOWMAXIMIZED 3 #define SW_MAXIMIZE 3 #define SW_SHOWNOACTIVATE 4 #define SW_SHOW 5 #define SW_MINIMIZE 6 #define SW_SHOWMINNOACTIVE 7 #define SW_SHOWNA 8 #define SW_RESTORE 9 #define SW_SHOWDEFAULT 10 PROCEDURE ShellOpenFile( cFile, nMode ) DllCall( "SHELL32.DLL" , DLL_STDCALL, ; "ShellExecuteA", AppDesktop():GetHWND(), "open", cFile, ; NIL, CurDir(), nMode ) RETURN Soll auch an Terminal Servers gut sein. |
![]() | Steffen Schubert | Re: Runshell, Betriebssystemfehler 87 on Mon, 19 Jan 2015 17:13:11 +0100 Hallo Jurac, danke für den Tipp, aber Shellopenfile() geht nur für Prozesse, die asynchron gestartet werden. Wenn ich auf das Ergebnis eines Prozesses warten muss, kann ich nur Runshell() nehmen. Grüße Steffen Am 19.01.2015 um 13:57 schrieb "Matej Jurac": > Ein 'Helfer', nicht uber RunShell, sondern uber ShellExecuteA, ist auch fur's > Dokumenten geeinigt und print, edit, etc. > > http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153%28v=vs.85%29.aspx > > > //modes for run, 0 and 1 most used > #define SW_HIDE 0 > #define SW_NORMAL 1 > #define SW_SHOWMINIMIZED 2 > #define SW_SHOWMAXIMIZED 3 > #define SW_MAXIMIZE 3 > #define SW_SHOWNOACTIVATE 4 > #define SW_SHOW 5 > #define SW_MINIMIZE 6 > #define SW_SHOWMINNOACTIVE 7 > #define SW_SHOWNA 8 > #define SW_RESTORE 9 > #define SW_SHOWDEFAULT 10 > > PROCEDURE ShellOpenFile( cFile, nMode ) > > DllCall( "SHELL32.DLL" , DLL_STDCALL, ; > "ShellExecuteA", AppDesktop():GetHWND(), "open", cFile, ; > NIL, CurDir(), nMode ) > > RETURN > > Soll auch an Terminal Servers gut sein. > |
![]() | Till Warweg | Re: Runshell, Betriebssystemfehler 87 on Tue, 20 Jan 2015 14:15:14 +0100 Hallo Steffen, gibt es im Eventlog des Servers vielleicht irgendwelche Hinweise - insbesondere auch darauf, was seit "heute Mittag" mit der Maschine geschehen sein könnte? Mit besten Grüßen, Till Warweg -------------------------------------------------------------------- Technical Support: support@alaska-software.com News Server: news.alaska-software.com Homepage: http://www.alaska-software.com WebKnowledgeBase: http://www.alaska-software.com/kbase.shtm Fax European Office: +49 (0) 61 96 - 77 99 99 23 Fax US Office: +1 (646) 218 1281 -------------------------------------------------------------------- "Steffen Schubert" wrote in message news:81395c3$64af54c$f65@news.alaska-software.com... Hallo Jurac, danke für den Tipp, aber Shellopenfile() geht nur für Prozesse, die asynchron gestartet werden. Wenn ich auf das Ergebnis eines Prozesses warten muss, kann ich nur Runshell() nehmen. Grüße Steffen Am 19.01.2015 um 13:57 schrieb "Matej Jurac": > Ein 'Helfer', nicht uber RunShell, sondern uber ShellExecuteA, ist auch > fur's > Dokumenten geeinigt und print, edit, etc. > > http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153%28v=vs.85%29.aspx > > > //modes for run, 0 and 1 most used > #define SW_HIDE 0 > #define SW_NORMAL 1 > #define SW_SHOWMINIMIZED 2 > #define SW_SHOWMAXIMIZED 3 > #define SW_MAXIMIZE 3 > #define SW_SHOWNOACTIVATE 4 > #define SW_SHOW 5 > #define SW_MINIMIZE 6 > #define SW_SHOWMINNOACTIVE 7 > #define SW_SHOWNA 8 > #define SW_RESTORE 9 > #define SW_SHOWDEFAULT 10 > > PROCEDURE ShellOpenFile( cFile, nMode ) > > DllCall( "SHELL32.DLL" , DLL_STDCALL, ; > "ShellExecuteA", AppDesktop():GetHWND(), "open", cFile, ; > NIL, CurDir(), nMode ) > > RETURN > > Soll auch an Terminal Servers gut sein. > |
![]() | Werner Martl | Re: Runshell, Betriebssystemfehler 87 on Tue, 20 Jan 2015 17:13:32 +0100 Wie sieht der Aufruf aus? Grüße, Werner |
![]() | Steffen Schubert | Re: Runshell, Betriebssystemfehler 87 on Mon, 20 Apr 2015 08:22:58 +0200 Ist zwar schon eine Weile her, aber ich nehme den Beitrag noch mal auf: Runshell() bringt einen Fehler beim Aufruf CMD-Befehlen Beispiel: Runshell(Runshell('/C START /MIN /WAIT Test.exe',,FALSE,TRUE)) Im Eventlog war nichts aussergewöhnliches zu finden. Nach einigem Probieren haben wir festgestellt, dass die Environment-Variable "ComSpec" nicht mehr gesetzt war. Ich habe die Variable wieder eingetragen (C:\Windows\System32), seitdem kommt keine Fehlermeldung von Runshell() mehr, ausführen tut er aber gar nichts. Wenn ich die CMD.exe "mit der Hand" starte, tut er alles, was er soll. Hat jemand das Problem schon mal gehabt, bzw. hat eine Idee, was es sein könnte? Grüße Steffen Am 19.01.2015 um 17:13 schrieb "Steffen Schubert": > Hallo Jurac, > > danke für den Tipp, aber Shellopenfile() geht nur für Prozesse, die > asynchron gestartet werden. Wenn ich auf das Ergebnis eines Prozesses > warten muss, kann ich nur Runshell() nehmen. > > Grüße Steffen > > > Am 19.01.2015 um 13:57 schrieb "Matej Jurac": >> Ein 'Helfer', nicht uber RunShell, sondern uber ShellExecuteA, ist >> auch fur's >> Dokumenten geeinigt und print, edit, etc. >> >> http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153%28v=vs.85%29.aspx >> >> >> >> //modes for run, 0 and 1 most used >> #define SW_HIDE 0 >> #define SW_NORMAL 1 >> #define SW_SHOWMINIMIZED 2 >> #define SW_SHOWMAXIMIZED 3 >> #define SW_MAXIMIZE 3 >> #define SW_SHOWNOACTIVATE 4 >> #define SW_SHOW 5 >> #define SW_MINIMIZE 6 >> #define SW_SHOWMINNOACTIVE 7 >> #define SW_SHOWNA 8 >> #define SW_RESTORE 9 >> #define SW_SHOWDEFAULT 10 >> >> PROCEDURE ShellOpenFile( cFile, nMode ) >> >> DllCall( "SHELL32.DLL" , DLL_STDCALL, ; >> "ShellExecuteA", AppDesktop():GetHWND(), "open", cFile, ; >> NIL, CurDir(), nMode ) >> >> RETURN >> >> Soll auch an Terminal Servers gut sein. >> > |
![]() | Andreas Gehrs-Pahl | Re: Runshell, Betriebssystemfehler 87 on Mon, 20 Apr 2015 06:41:25 -0400 Steffen, >Runshell() bringt einen Fehler beim Aufruf CMD-Befehlen >Beispiel: Runshell(Runshell('/C START /MIN /WAIT Test.exe',,FALSE,TRUE)) Ich habe dazu einige Fragen: Was ist der Rückgabewert des Programs "Test.exe"? Ist es der Name eines anderen Programs das Du mit RunShell() aufrufen willst? Ist dieses (zweite) Program im Pfad und kann es direkt aufgerufen werden? Bist Du Dir ganz sicher, das "Test.exe" einen String Rückgabewert im Format: "/C START Program_Name.exe" hat? Der Aufruf der zweiten RunShell() würde dieses Format benötigen, um irgendwas zu tun. Der Rückgabewert des Programs "CMD.exe" -- das Du in Wirklichkeit mit dieser RunShell() Schreibweise aufrufst -- ist immer eine Fehler Number. Das heißt das "RunShell('\C START...')" immer einen numerischen Wert zurückgeben wird! Warum startest Du das "Test.exe" Program nicht direkt mit: "Runshell('', 'Test.exe', .f., .t.)", so daß es einen eigenen Rückgabewert haben kann? Das würde auch die "COMSPEC" variable überflüssig machen und Du würdest kein zusätzliches "CMD.exe" Kommandofenster öffnen. Kannst Du uns ein wenig ausführlicher erklären was Du eigentlich erreichen möchtest? Vielleicht wolltest Du nur das "Test.exe" Program aufrufen, und die zweite, äußere "RunShell()" ist garnicht geplant? Brauchst Du einen Rückgabewert von diesem "Test.exe" Program? Was passiert, wenn Du "Runshell('', 'Test.exe', .f., .t.)" benutzt? Andreas Andreas Gehrs-Pahl Absolute Software, LLC phone: (989) 723-9927 email: Andreas.GP@Charter.net web: http://www.Aerospace-History.net |
![]() | Steffen Schubert | Re: Runshell, Betriebssystemfehler 87 on Tue, 21 Apr 2015 17:07:53 +0200 Hallo Andreas, danke für deine ausführliche Antwort. "Test.exe" gibt es nicht, es ist nur ein Beispiel. Die Programme liegen immer im aktuellen Pfad und werden zur Sicherheit auch mit exakter Laufwerks- und Pfad-Angabe aufgerufen. Wir haben einige externe Kommandozeilen-Tools, die minimiert ausgeführt werden sollen. Da wird manchmal nur ein Schalter gesetzt oder z.B. mehrere PDFs verknüpft und viele andere Dinge. Der Rückgabewert interessiert nicht, die Prozesse sollen nur minimiert starten und das Xbase-Programm soll warten, bis sie erledigt sind (deshalb ist auch Windows-Shellopenfile() nicht anwendbar). Wie gesagt, es sind eine Menge ähnlich gearteter Aufrufe, die seit Jahren wunderbar funktionieren, nur seit Kurzem eben nicht auf diesem einen Terminalserver (Windows Server 2008). Da diese Aufrufe aber nur unter Xbase++ nicht mehr funktionieren, habe ich die Frage hier im Forum gestellt. Ich hatte die Hoffnung, dass vielleicht irgendjemand schon mal ein ähnliches Problem hatte oder zumindest eine Idee hat, was da mit passiert ist. Grüße Steffen Am 20.04.2015 um 12:41 schrieb "Andreas Gehrs-Pahl": > Steffen, > >> Runshell() bringt einen Fehler beim Aufruf CMD-Befehlen >> Beispiel: Runshell(Runshell('/C START /MIN /WAIT Test.exe',,FALSE,TRUE)) > > Ich habe dazu einige Fragen: > > Was ist der Rückgabewert des Programs "Test.exe"? Ist es der Name eines > anderen Programs das Du mit RunShell() aufrufen willst? > > Ist dieses (zweite) Program im Pfad und kann es direkt aufgerufen werden? > > Bist Du Dir ganz sicher, das "Test.exe" einen String Rückgabewert im > Format: "/C START Program_Name.exe" hat? Der Aufruf der zweiten RunShell() > würde dieses Format benötigen, um irgendwas zu tun. > > Der Rückgabewert des Programs "CMD.exe" -- das Du in Wirklichkeit mit dieser > RunShell() Schreibweise aufrufst -- ist immer eine Fehler Number. Das heißt > das "RunShell('\C START...')" immer einen numerischen Wert zurückgeben wird! > > Warum startest Du das "Test.exe" Program nicht direkt mit: > "Runshell('', 'Test.exe', .f., .t.)", so daß es einen eigenen Rückgabewert > haben kann? Das würde auch die "COMSPEC" variable überflüssig machen und Du > würdest kein zusätzliches "CMD.exe" Kommandofenster öffnen. > > Kannst Du uns ein wenig ausführlicher erklären was Du eigentlich erreichen > möchtest? Vielleicht wolltest Du nur das "Test.exe" Program aufrufen, und > die zweite, äußere "RunShell()" ist garnicht geplant? Brauchst Du einen > Rückgabewert von diesem "Test.exe" Program? > > Was passiert, wenn Du "Runshell('', 'Test.exe', .f., .t.)" benutzt? > > Andreas > |
![]() | Andreas Gehrs-Pahl | Re: Runshell, Betriebssystemfehler 87 on Tue, 21 Apr 2015 11:58:08 -0400 Steffen, >danke für deine ausführliche Antwort. Gern geschehen. >"Test.exe" gibt es nicht, es ist nur ein Beispiel. Das habe Ich mir schon gedacht. Ich habe "Test.exe" als einen Platzhalter für Deinen eigentlichen Aufruf betrachtet. Weil Du die folgende Frage nicht beantwortet hast, hier ist sie nochmal: Was passiert, wenn Du "RunShell(cParameters, c_Program, .f., .t.)" benutzt? Der erste Parameter von RunShell(), "cParameters", ist ein String mit allen Laufzeit Parametern für das gestartete Program. Der zweite Parameter von RunShell(), "c_Program", ist ein String mit dem Namen (and Pfad) des Programs. Der dritte Parameter von RunShell(), ".f.", sorgt dafür das RunShell() wartet bis dein Program beendet ist. Der vierte Parameter von RunShell(), ".t.", sorgt dafür das dein Program im Hintergrund (minimiert) gestartet wird. Das aufgerufene Program kann sich naturlich selbst in den Vordergrund bringen oder ein maximiertes Fenster öffnen, aber das kannst Du ja in keinem Fall verhindern. Kannst Du das mal ausprobieren und uns wissen lassen ob es funktioniert? Andreas Andreas Gehrs-Pahl Absolute Software, LLC phone: (989) 723-9927 email: Andreas.GP@Charter.net web: http://www.Aerospace-History.net |