Warum kann edit.com (16 Bit) unter Windows XP oder in Virtual PC unter Windows 7 nicht erfolgreich beendet werden, indem Sie auf die Schaltfläche "Schließen" klicken?

401
Kevin Dong

Warum kann edit.com (16 Bit, auch als MS-DOS-Editor bezeichnet) nicht erfolgreich beendet werden, indem Sie unter Windows XP auf die Schaltfläche "Schließen" klicken oder unter Windows 7 in Virtual PC, können Sie es jedoch erfolgreich beenden, indem Sie auf DateiBeenden klicken .

Screenshot (nicht auf Englisch :-)):

Der gleiche Fehler in Englisch:

Image In English

0
Ich würde sagen, der Grund ist, dass der x-Button die Shell schließt, nicht jedoch die interpretierte Laufzeit, die 16-Bit-Apps ausführt. es ist analgous, htop in einem Linux-Terminal laufen zu lassen und dann das Fenster zu schließen. Sie erhalten die Meldung, dass htop auch dann ausgeführt wird, wenn die Shell geschlossen ist, und Sie können sie nicht schließen, da Ihre Shell nicht mehr verfügbar ist. Frank Thomas vor 10 Jahren 2
Denn auf ganz grundlegender Ebene müssen Sie das Nahverhalten aktivieren. Wenn die Schließen-Schaltfläche die Anwendung nicht schließt, wurde sie nicht dafür programmiert. Ramhound vor 10 Jahren 0
Ein VDM unter Windows NT 5.1 und Virtual PC unter Windows NT 6.1 sind zwei sehr unterschiedliche Dinge. Das sollten zwei Fragen sein. JdeBP vor 10 Jahren 0
@JdeBP, sie unterscheiden sich nicht. Das virtuelle System, nach dem er fragt, ist XP, das in einer VM in 7 ausgeführt wird. Die Gastkopie von XP verhält sich in Bezug auf NTVDM genauso wie auf Bare-Metal. Synetech vor 10 Jahren 1
Warum kann edit.com (16 Bit, alias MS-DOS Editor) nicht erfolgreich beendet werden, indem Sie auf die Schaltfläche Schließen in WinXP oder in Virtual PC unter Win7 klicken, kann es jedoch erfolgreich beendet werden, indem Sie auf Datei >> Beenden klicken drück den Knopf? Ich habe nie irgendwelche Probleme damit gehabt; Da der [NTVDM auf meinem XP-System nicht mehr ordnungsgemäß funktioniert] (http://superuser.com/questions/419435/fixing-a-broken-ntvdm), muss ich bestimmte Programme wie Bearbeiten schließen, indem Sie auf klicken [x] -Taste. Synetech vor 10 Jahren 0
@Synetech Nun, ich wollte den Screenshot zuerst posten, aber mein Betriebssystem ist in traditionellem Chinesisch. Die Fehlermeldung befindet sich alle in Trad. Chinesisch. Ist das Versenden der Fehlermeldung easiler, um mein Problem zu verstehen? Kevin Dong vor 10 Jahren 0
@Synetech Ich habe gerade den Screenshot gepostet :-) Kevin Dong vor 10 Jahren 0
@KevinDongNaiJia Könnten Sie versuchen, es zu übersetzen? Alternativ können Sie auch die Tastenkombination Strg + c drücken, um den Dialog zu kopieren (funktioniert in den meisten Windows-Dialogen), und fügen Sie ihn dann in die Frage ein. Das Kopieren und Einfügen ist dann viel einfacher als das Ablesen eines Bildes. Bob vor 10 Jahren 0
@daxlerod Danke für deine Hilfe. Als Sie die Fehlermeldung zur englischen Version gepostet haben, habe ich diese Wörter in Google Translation eingegeben. PS: Diese Fehlermeldung kann nicht kopiert und eingefügt werden ... :-) Kevin Dong vor 10 Jahren 0

1 Antwort auf die Frage

1
Synetech

Warum kann edit.com erfolgreich beendet werden, indem Sie auf Datei → Beenden klicken, aber nicht auf die Schaltfläche zum Schließen ☒? Warum bewirkt der Schließen-Button, dass eine Aufforderung zum Abbruch kommt?

TL; DR

Da Edit ein DOS-Programm ist, hat File → Exit nichts mit Windows oder der Schaltfläche zu tun .

Subsysteme

Windows verfügt über zwei primäre Subsysteme ("Frameworks", wenn Sie so wollen), mit deren Hilfe ein Programm die Dinge vereinfachen kann und der Programmierer vermeiden muss, alles manuell auszuführen und das Rad neu zu erfinden. Es gibt das Standard-Windows-Subsystem und das Konsolensubsystem .

Windows-Programme sind GUI-Programme (grafische Benutzeroberfläche), während Konsolenprogramme CLI-Programme (Command Line Interface) sind. Dies sind sehr unterschiedliche Designs und was für den einen funktioniert, funktioniert für den anderen nicht.

Windows-Subsystem

Das Windows-Subsystem ist das gebräuchlichste, und Programme mit grafischen Fenstern und Steuerelementen verwenden dies. Das "Herz" des Programms ist eine Windows-Meldungsschleife . Nachdem das Programm initialisiert und betriebsbereit ist, tritt es in eine Endlosschleife ein, in der es sich im Leerlauf befindet und geduldig darauf wartet, dass etwas passiert. Dies kann vom Benutzer eingegebene Eingaben, ein Zeitgeber, Netzwerkaktivität usw. umfassen. Wenn Windows Änderungen feststellt, auf die das Programm reagieren muss oder kann, werden dem Programm eine Nachricht gesendet . Wenn es sich in der Nachricht um etwas handelt, für das das Programm ein Interesse hat, antwortet es darauf mit einem Handler, der nur eine Funktion ist, die etwas tut.

(So ​​funktionieren auch die meisten Spiele. Sie werden eine Hauptspielschleife haben , die auf Eingaben von Gamepad-Schaltflächen, Timern usw. wartet, sie aktualisiert dann die Spielwelt, rendert ein Bild, gibt es auf dem Bildschirm aus und beginnt von vorne .)

Hung-Programme

Normalerweise, wenn ein Programm eine Nachricht erhält, wird es diese entweder bearbeiten oder weiterleiten. Dies geschieht normalerweise schnell. Manchmal kann ein Programm jedoch aus irgendeinem Grund hängen bleiben, was dazu führt, dass es keine Meldungen verarbeitet. Windows kann erkennen, wann dies geschieht, und wenn es zu lange dauert, wird das Programm als eingefroren betrachtet und bietet an, dass der Benutzer das nicht reagierende Programm beendet, anstatt dass es ordnungsgemäß heruntergefahren wird. Dies bedeutet, dass das Programm abrupt endet und nicht nur nicht gespeicherte Dateien verloren geht, sondern dass offene Dateien möglicherweise in einem inkonsistenten Zustand verbleiben, wodurch sie beschädigt werden.

Konsolen-Subsystem

Konsolenprogramme unterscheiden sich von grafischen Windows-Programmen. Sie haben sich aus ihren DOS-Vorfahren entwickelt, und obwohl sie durch die Windows-Eingabeaufforderung eine Menge neuer Funktionen gewonnen haben, funktionieren sie wie alte DOS-Programme, einschließlich des Startens, Laufens und Herunterfahrens.

Programm schließen

Lassen Sie uns untersuchen, was passiert, wenn Sie auf die Schaltfläche für beide Arten von Programmen klicken .

Ein Windows-Programm schließen

Wenn Sie auf die Schaltfläche eines Windows-Programms klicken, sendet Windows diesem Programm eine WM_CLOSENachricht. Die Programmschleife erkennt die Nachricht und antwortet durch Aufrufen einer Funktion, die die Standardroutine zum Beenden eines Windows-Programms durchläuft (hoffentlich nach einigen Bereinigungsarbeiten wie dem Freigeben zugewiesener Ressourcen, dem Speichern von Dateien usw.). Abgesehen von den Bereinigungsarbeiten erfolgt das eigentliche Herunterfahren des Routings ziemlich schnell, und Windows geht zur nächsten Aufgabe über.

Konsolenprogramm schließen

Wenn Sie auf die Schaltfläche der Eingabeaufforderung klicken, teilen Sie der Eingabeaufforderung mit, dass sie geschlossen werden soll. Wenn es diese Nachricht erhält, versucht es zu schließen, und wenn Sie an der Eingabeaufforderung untätig sitzen, kann es dies ohne viel Zögern tun. Was passiert aber, wenn in der Eingabeaufforderung ein Programm geöffnet und ausgeführt wird? Dieses Programm ist insgesamt ein separater Prozess. Die Eingabeaufforderung kann das Programm nicht einfach beenden, das wäre nicht benutzerfreundlich und könnte Daten beschädigen oder nicht gespeicherte Dateien verlieren. Stattdessen wird versucht, die Schließmeldung an das Programm zu übergeben. Es gibt zwei Szenarien, die sich an dieser Stelle abspielen können:

  • Wenn es sich bei dem Programm um ein Windows-Konsolenprogramm handelt, funktioniert das Senden der Close-Nachricht normalerweise sofort, da es mit dem Windows-Konsolensubsystem kompiliert wurde und Sie möglicherweise einige nicht gespeicherte Dateien verlieren, weil es Windows-spezifischen Konsolencode verwendet keine Verzögerung, und daher muss Windows nicht zum Töten greifen.

  • Wenn das Programm ein DOS-Programm (wie Edit) ist, wurde es jedoch so kompiliert, dass es unter DOS ausgeführt wird, und kennt daher nichts von Windows und reagiert daher nicht. Daher denkt Windows, dass es aufgehängt ist und bietet an, das Programm zu beenden.

Datei → Beenden

Bei einem Windows-Programm ist der Exit-Befehl (normalerweise File → Exit) nur ein Alias ​​für WM_CLOSE. Wenn Sie das Programm beenden, wird die Schließmeldung so angezeigt, als hätten Sie auf die Schaltfläche Schließen geklickt.

Mit Edit hat der Exit-Befehl (auch File → Exit) nichts mit Windows zu tun. Es ist eine integrierte Funktion dieses DOS-Programms. Wenn Sie auf die Schließen-Schaltfläche klicken, ist dies eine völlig andere Sache als das Beenden von Edit. Das Klicken sagt dem Programm also nicht das Schließen.

Unterschiedliche Ergebnisse

Aber warum erhält Kevin ein anderes Ergebnis als andere (und ich)? Dies ist wahrscheinlich auf einen Unterschied in der Zeitüberschreitung zurückzuführen, die Windows für seine Routinen konfiguriert hat, die erkennen, wann ein Programm eingefroren ist. Es gibt tatsächlich verschiedene Einstellungen, die dies beeinflussen. Wenn Sie die Einstellungen ändern, muss Windows mehr oder weniger warten, bevor das Dialogfeld angezeigt wird.

Ich wollte sie alle aufzulisten, aber während sie auf der Suche, ich am Ende der Suche nach einem Beitrag, dass ich eine Weile gemacht hatte, zurück, die bereits sie alle aufgelistet, so dass, wenn jemand in den Details interessiert ist, können Sie sie dort finden.

Synetech, großartige Antwort, aber * ziemlich bitte *, fett / stark der letzte Punkt, denn ... nun, alles drin lässt sich zu "EDIT weiß nicht, dass Windows existiert und umgekehrt". Doktoro Reichard vor 10 Jahren 0
Schöne, lange Antwort, aber es geht nicht um einen zentralen Punkt. Der Versuch, DOS-Anwendungen zu schließen, schlägt nicht immer fehl. Ich habe gerade versucht, `edit.com 'auf einem Windows XP-Computer zu schließen. Das Fenster wurde sofort geschlossen und die von mir vorgenommenen Änderungen verworfen. Mit anderen Worten, dies kann gemacht werden, und zwischen meinem System und dem Fragesteller muss etwas anders sein, z. B. eine Einstellung oder die Art und Weise, wie er `edit.com` ausführt. nitro2k01 vor 10 Jahren 0
@Nitro2k01, eigentlich ist es genau das, was ich sagte (http://superuser.com/questions/689664/why-edit-com-16-bit-on-winxp-or-in-virtual-pcon-win7 -cannot-exit-success / 689876 # comment875864_689664); Ich muss DOS-Programme wie "Bearbeiten" mit der Schaltfläche "Schließen" schließen, da mein NTVDM fehlerhaft ist und ich keine Probleme habe. Ich habe diese Antwort basierend auf dem hinzugefügten Screenshot geschrieben. Ich habe eine Vorstellung davon, was der Unterschied sein könnte, und ich werde einige Informationen dazu hinzufügen. Synetech vor 10 Jahren 0