2010-11-24 11 views
1

Wir testen derzeit einen Bugfix für eine alte VB6-Anwendung, die ursprüngliche Version des Programms würde die PID erhalten und speichern Sie es in einem int, und schreiben Sie es dann in die Datenbank. Dies funktioniert gut, bis Ihre Anwendung eine PID höher als 32768 zugewiesen bekommt. In diesem Fall erhalten Sie einen Überlauf und die Anwendung stirbt.Erzwingen einer hohen PID in Windows

Wir haben dies behoben, indem wir alles auf lang statt auf int geändert haben. Aber jetzt haben wir ein Problem beim Testen. Wir sehen dieses Problem nur selten in unseren Produktionsumgebungen (aber mit verheerendem Effekt, wenn es auftritt) und nie beim Testen. Ich habe versucht, eine hohe PID zu provozieren, indem ich eine Menge Programme hervorbrachte, aber ich schaffte es nie, PID 25000 zu überholen.

Ich fand ein Tool namens HighPid (http://winprogger.com/?p= 29), aber leider scheint es seine Versprechen nicht zu erfüllen. Hat also jemand da draußen ein ähnliches (aber funktionierendes) Werkzeug oder einen anderen Trick, um eine hohe PID auf einem Windows-Server zu erzwingen?

+2

Warum nicht fälscht die hohe PID in Ihrem Code? –

+0

Ich wollte keinen zusätzlichen Testcode zu einer bereits kniffligen VB6-App hinzufügen, die verschrottet wird, sobald eine neue App in .Net verfügbar ist. Dies ist nur um uns dabei zu überbrücken. – Grubsnik

Antwort

2

Start 32767 Dummy wirklich leichte Prozesse? ;-) 100kb * 32k = 3.2Gb, RAM sollte dich also nicht einschränken.

+1

Eigentlich würden Sie nicht so viele Prozesse benötigen, da Windows derzeit nur Prozess-IDs verwendet, die ein Vielfaches von vier sind (http://blogs.msdn.com/b/oldnewthing/archive/2008/02/28/7925962.aspx) –

+0

Es sieht so aus, als würde Windows Sie auf 1947 Threads pro Prozess-ID beschränken, was bedeutete, dass ich mehrere Instanzen meiner Test-App starten musste. – Grubsnik

1

Sie es aus einer anderen Perspektive und Instrumente, um die Funktion, die die Prozess-ID abruft, so etwas wie (Pseudo-Code) aussehen könnte:

function GetPID() 
{ 
    // ... retrieve process id 

    #if DEBUG 
     return pid + 32000; 
    #else 
     return pid; 
    #endif 
}