2014-01-07 5 views
12

Ich habe Neugier Frage in Bezug auf Konsole vs Windows-Anwendung, wenn Sie die Anwendung von der Cmd ausführen, die exe direkt aufrufen.
Wenn die Anwendung als Konsolenanwendung kompiliert wird (wird es als meine ConApp siehe), wenn die App über die cmd ausgeführt wird, die prompt wartet auf die App läuft abgeschlossen ist, bevor Sie fortfahren. Wenn jedoch die Anwendung als eine Windows-Anwendung kompiliert wurde (wird es als meine WinApp), Start der App über cmd die Eingabeaufforderung wird die WinApp, verständlicherweise dies erwartet Verhalten.
Um die WinApp zu stoppen, die Cmd von feuern und vergessen, müsste man die App in cmd mit etwas wie "start \ wait WinApp.exe" starten, dies wird die Cmd-Eingabeaufforderung auf warten WinApp zu stoppen, bevor Sie fortfahren.
Meine Frage darum ist, wie informiert Konsole-Anwendung den Cmd, oder woher weiß der Cmd, dass es offen bleiben muss, und nicht die ConApp Feuer-und-vergessen? Und ist es möglich, die gleiche Art von Verhalten in meinem WinApp dh ich muss nicht aufrufen "Start \ warten"?

Hinweis:
ich um aber gespielt haben bei der Verwendung von AllocConsole und AttachConsole, wenn AttachConsole (-1) in meinem WinApp verwenden, die Cmd noch Feuer- und vergisst die WinApp jedoch die WinApp scheint um nur ein neues Konsolenfenster zu öffnen.Starten von Windows-Anwendung vs Konsole-Anwendung über Cmd

+0

Sind Sie in den technischen Details interessiert sind oder, wie Ihr Programm aus Feuer und vergessen ändern Modus Modus warten? –

+1

Ob eine ausführbare Datei eine Konsolenmodus-App oder eine native Windows-App ist, wird in der Kopfzeile der EXE-Datei aufgezeichnet. Cmd.exe schaut es an, um zu wissen, was zu tun ist. Dies wird dir nicht helfen, etwas zu lösen. –

Antwort

7

Diese Information wird als Teil des PEOptHeader-Teils des EXE-Binärformats gespeichert. Insbesondere das Subsystem Feld teilt das Betriebssystem, welche Art von Anwendung ist dies und kann die folgenden Werte

  • 1 hat: Mutter
  • 2: Windows/GUI
  • 3: Windows Nicht-GUI
  • 5 : OS/2
  • 7: POSIX

Dies ist, was Fenster erzählt, was es Art von Programm und gibt es daher die Fähigkeit unterscheiden zu machen Entscheidungen wie cmd tut.

Documentation Link

3

Technische Details zur Seite (JaredPar did a really good job of doing that), wenn Sie Ihr Programm aus Windows/GUI Modus Windows non-GUI alles, was Sie tun müssen, ändern will, ist zu einem Projekt-Einstellungen gehen und auf die Dropdown-Wechsel von „Windows-Anwendung "auf‚Console Application‘

enter image description here

Sie können ein Fenster Anwendungslauf als Konsolenanwendung und es wird Ihnen das Verhalten, das Sie erwarten. (Beachten Sie jedoch jetzt, wenn Sie auf das Symbol für das Programm doppelklicken, wird ein Konsolenfenster geöffnet, das geöffnet bleibt, während Ihr Programm geöffnet ist.)

enter image description here