Frage

Ich habe einen Kunden bekommt, den mir sagte, dass mein Programm (einfaches Benutzer-Landprogramm, kein Fahrer) sein System abstürzt mit einem Blue Screen Of Death (BSOD). Er sagt, er nie begegnet ist, dass mit anderem Programm, und dass er es leicht mit meinem reproduzieren kann.

Die BSOD ist vom Typ CRITICAL_OBJECT_TERMINATION (0x000000F4) mit Objekttyp 0x3 (Prozess):. Verfahren oder für den Systembetrieb entscheidend Thread ist unerwartet verlassen oder wurde beendet

Kann ein einfaches Programm für einen BSOD verantwortlich sein (auch auf Vista ...) oder sollte er die Hardware oder Betriebssystem-Installation überprüfen?

War es hilfreich?

Lösung

Der einfachste Weg, um einen BSOD mit einem User-Space-Programm zu führen ist (afaik) an Kill das Windows-Subsystem Prozess (csrss.exe). Das muss nicht fehlerhafte Hardware noch einen Fehler im Kernel oder einen Treiber, es braucht nur Administratorrechte 1 .

Was ist Ihr Code genau tun? Die Fehlermeldung ( „A Prozess oder Thread von entscheidenden Bedeutung für den Systembetrieb beenden hat unerwartet beendet oder worden ist.“) Klingt wie einer der wesentlichen Systemprozesse beendet. Vielleicht haben Sie einen Prozess töten und unbeabsichtigt den falschen Prozess?

Wenn irgendwie möglich, Sie könnten versuchen, ein Speicherabbild von diesen Kunden zu bekommen. Mit den Debugging Tools für Windows können Sie dann analysieren weiter, dass Dump wie hier .

1 Fenster nicht daran hindern, die Sie von dabei weil es " hält Administratoren die Kontrolle über ihre Computer ". So ist dies durch Design und nicht ein Fehler. Lesen Sie Raymonds Artikel und Sie werden sehen, warum.

Andere Tipps

Nur weil Ihr Programm nicht ein Fahrer ist, bedeutet nicht, es wird nicht Verwendung ein Fahrer.

In der Theorie Ihr Code soll nicht in der Lage sein, den Computer BSOD. Es ist zum O bis stellen Sie sicher, dass dies nicht geschieht. Per Definition ist das Mittel ist es ein Problem irgendwo entweder in Hardware oder in anderer Code als Ihr Programm. Das bedeutet nicht ausschließt auch dort allerdings um einen Fehler im Code zu sein.

Kurze Antwort ist ja. Lange Antwort hängt davon ab, was Sie Programm ist wohl zu tun und wie sie es tut?

Normalerweise sollte es nicht. Ist dies der Fall, muss es entweder

  • Ein Fehler im Windows-Kernel (möglich, aber sehr unwahrscheinlich)
  • Ein Fehler in einem Gerätetreiber (nicht unbedingt in einem Gerät Ihr Programm verwendet, könnte dies ziemlich kompliziert werden)
  • Ein Fehler in der Hardware

ich auf Option Nummer zwei (Gerätetreiber) setzen würde, aber es wäre interessant, wenn Sie uns eine detailliertere Dump erhalten könnten.

Nun, ja es kann - aber aus vielen verschiedenen Gründen.

Deshalb haben wir Tests auf verschiedenen Maschinen, Betriebssysteme, Hardware etc ..

Wenn Sie einige Anforderungen für das Programm festgelegt und Ihre Benutzer nach ihnen?

Wenn Sie es selbst nicht duplizieren, und Ihr Programm nicht Admin ausführen müssen, würde ich über etwas suspicous sein

  • Die Stabilität dieses Systems Hardware
  • Das Virus / Malware Status dieses Systems.

Wenn Sie physischen Zugriff auf den Client-Box zu bekommen, könnte es sich lohnen läuft eine vollständige Virus-Scan mit einer up-to-date-Scanner sein, und läuft eine vollständige memtest auf sie.

hatte ich ein System einmal das schien stabil, mit der Ausnahme, dass ein certian weniger Programme darauf nicht laufen würden (und würden manchmal die Box zum Absturz bringen). Memtest zeigte mein RAM einige schlechte Bits hatte, aber sie waren in higer sims, so dass sie nur dann, wenn ein Programm zugegriffen wurde versucht, eine Menge RAM zu verwenden.

Nein, und das ist so ziemlich per Definition. Das Schlimmste, was man sagen kann, ist, dass ein Benutzer-Ausbringen „ausgelöst“ ein Windows-Fehler oder einen Treiber Fehler kann. Aber ein modernes Desktop-Betriebssystem ist voll verantwortlich für seine eigene Integrität; a BSOD ist ein Ausfall dieser Integrität. Deshalb ist das O verantwortlich ist, und nur das Betriebssystem.

(Beispiel eines BSOD Fehler, dass Ihre Anwendung allein aussetzen könnte: Virenscanner als Treiber implementiert, die abstürzen, wenn eine Datei von Sektor 0xFFFFFFFF ausgeführt wird, ein Sektor, der auf diese Maschine nur eine DLL Ihrer Anwendung enthalten geschieht )

hatte ich Probleme, wenn meinen app verlassen, ohne alle Prozesse zu stoppen und BD-Verbindungen, wenn das Programm beendet wird (ich das gesamte IDE abgestürzt). Ich stelle den „Anhalten und Trennen“ Code in dem „Terminate“ von „Form_Closed“ Ereignisse meiner Hauptform und das Problem wa gelöst, ich weiß es nicht, dass dies Ihre Situation.

Ein weiteres Problem kann sein, wenn der Benutzer die gleichen Ressourcen zugreifen versucht, Ihre App verwendet (Datenbanken, Hardware, Steckdosen, etc.). Fragen Sie ihn / sie über das, was er apps / sie verwendet, wenn der BSOD passiert.

Ein Virus kann nicht verworfen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top