Consolenfenster schließt nicht, wenn RunProgramm verwendet w

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Consolenfenster schließt nicht, wenn RunProgramm verwendet w

Beitrag 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.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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))
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag 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:
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag 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.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag 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?
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> Wo liegt hier der Fehler?
An W2K oder an der Windows-Installation, bei mir gehts auch unter WXP
problemlos.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag 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...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Consolenfenster schließt nicht, wenn RunProgramm verwend

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten