Seite 1 von 2

Consolenfenster schließt nicht, wenn RunProgramm verwendet w

Verfasst: 20.06.2007 15:48
von Kurzer
Hallo,

wieso geht bei diesem Code das Consolenfenster nicht wieder zu?
(Im Pfad der compilierten exe muß sich das Programm upx.exe befinden oder irgend ein anderes was consolenausgaben macht)

Code: Alles auswählen

OpenConsole()

Programm = RunProgram("UPX.exe", "",  "", #PB_Program_Open)

If IsProgram(Programm)
  PrintN("Toll, UPX lauft!")
Else
  PrintN("Geht nicht!")
EndIf

Delay (2000)

CloseProgram(Programm)
KillProgram(Programm) ; Nur, falls es doch noch laufen sollte...


PrintN("Jetzt geht zu, Du Sack!")

CloseConsole()

End
Rufe ich in meiner Anwendung kein externes Programm auf, dann wird das Consolenfenster nach Beendigung des Programms ordentlich geschlossen.

Verfasst: 20.06.2007 20:14
von bobobo
Closeprogram beendet nicht das Programm

Guck mal in der PB_hilfe nach


Ansonsten geht hier alles zu (Pb4.10b2 mit XP(neuster UPdateStand))

Verfasst: 20.06.2007 22:45
von Kurzer
Ich weiß, CloseProgramm() beendet nur den Kommunikationskanal, wenn das Programm mit #PB_Program_Open "gerunt" wurde:

Aus der Hilfe:
CloseProgramm()...
Schließt die Verbindung mit dem angegebenen Programm (gestartet mit RunProgram()) und gibt alle zugehörigen Daten frei.

Hinweis: Dies beendet nicht das Programm, sondern schließt lediglich die Verbindung mit ihm. Um das Programm zu beenden, rufen Sie erst KillProgram() auf. Auch wenn das Programm normal beendet wurde, muss dieser Befehl zum richtigen Freigeben aller Daten aufgerufen werden.


Und ein Killprogramm() habe ich ja drin im Source. Habe ich doch noch was in der Hilfe übersehen?

Kurios: Zuhause unter Win98 läuft der Code wie erwartet, aber unter Win2000 geht das CMD Fenster einfach nicht zu. :freak:

Verfasst: 20.06.2007 23:00
von ts-soft
Du solltest CloseProgram nach KillProgram benutzen :wink:
KillProgram fiunktioniert nur wenn die Verbindung offen ist

Code: Alles auswählen

OpenConsole()

Programm = RunProgram("UPX.exe", "",  "", #PB_Program_Open)

If IsProgram(Programm)
  PrintN("Toll, UPX lauft!")
Else
  PrintN("Geht nicht!")
EndIf

Delay (2000)


KillProgram(Programm) ; Nur, falls es doch noch laufen sollte...
CloseProgram(Programm)

PrintN("Jetzt geht zu, Du Sack!")

CloseConsole()

End
Erste den Telefonhörer auflegen und dann Tschüß sagen klappt meist auch
nicht so gut

Verfasst: 20.06.2007 23:04
von Kurzer
ts-soft, hab jetzt mal die Tomaten abgesetzt und nochmal mein post gelesen:

"rufen Sie erst KillProgram() auf..."

Jetzt hab auch ich es erkannt. :)
Werd's morgen gleich mal unter Win2000 testen. Danke.

Verfasst: 21.06.2007 10:30
von Kurzer
Nix zu machen: Unter Win2K geht das Consolenfenster nicht zu.

Code: Alles auswählen

OpenConsole()

Programm = RunProgram("UPX.exe", "",  "", #PB_Program_Open)

If IsProgram(Programm)
  PrintN("Toll, UPX lauft!")
Else
  PrintN("Geht nicht!")
EndIf

Delay (2000)


KillProgram(Programm) ; Nur, falls es doch noch laufen sollte...
CloseProgram(Programm)

PrintN("Jetzt geh zu, Du Sack!")

CloseConsole()

End
Ich rufe die Test-Exe über einen Dateimanager auf, daraufhin öffnet sich das Consolenfenster.
UPX tut was es soll und macht auch die Ausgaben ins Consolenfenster, aber danach geht es nicht zu. Unter Win98 alles kein Problem.

Wo liegt hier der Fehler?

Verfasst: 21.06.2007 10:51
von ts-soft
>> Wo liegt hier der Fehler?
An W2K oder an der Windows-Installation, bei mir gehts auch unter WXP
problemlos.

Verfasst: 22.06.2007 09:09
von Shardik
Ich habe ts-softs Beispiel-Code (nach Austausch von "UPX.Exe" gegen "Calc.Exe") unter WinNT 4 SP6 und Win2K Server SP3 getestet und das Schließen des Konsolenfensters funktioniert in beiden Systemen einwandfrei...

Re: Consolenfenster schließt nicht, wenn RunProgramm verwend

Verfasst: 22.06.2007 10:48
von Kaeru Gaman
ich hab das hier auch mal mit CALC ausprobiert, läuft logischerweise...
Kurzer hat geschrieben:(Im Pfad der compilierten exe muß sich das Programm upx.exe befinden oder irgend ein anderes was consolenausgaben macht)
macht das "UPX" was auch immer das ist denn ausgaben auf der vorher von dir geöffneten konsole?
also bekommt es ein handle der konsole übergeben?

dann erscheint mir das nicht mehr so verwunderlich, dass es ab w2k nicht mehr vernünftig läuft:

wenn ein programm die konsole als ausgabekanal angemeldet hat, muss es die auch wieder freigeben.
wenn du es hingegen einfach nur killst, kann es seinen kanal nicht freigeben,
und dann verhindert das OS möglicherweise, dass ein aktiver kanal geschlossen wird.

...das ist jedenfalls mal meine vermutung.
ich glaube nicht, dass bo³ die möglichkeit hatte, mit einem programm,
dass auf der konsole was ausgibt zu testen.
das ist ein feines aber extrem wichtiges detail,
das im verlauf des topics untergegangen ist.

Verfasst: 22.06.2007 11:38
von bobobo
WIE BITTE??


Ich hab immerzu alle Möglichkeiten und UPX gibt was auf den Konsole
aus (UPX ist übrigens ein EXEPacker zum Einschrumpeln von EXEn)