2010-11-24 6 views
1

Nous testons actuellement un correctif pour une ancienne application VB6, la version initiale du programme obtiendrait le PID et le stockerait dans un int, puis l'écrirait dans la base de données. Cela fonctionne bien jusqu'à ce que votre application reçoive un PID supérieur à 32768, auquel cas vous obtenez un débordement et l'application meurt.Forcer un PID élevé dans les fenêtres

Nous avons corrigé cela en changeant tout en long, au lieu de int. mais maintenant nous avons un problème de test. Nous ne voyons que rarement ce problème dans nos environnements de production (mais avec un effet dévastateur quand il se produit), et jamais dans les tests. J'ai essayé de provoquer un PID élevé en engendrant une tonne de programmes, mais je n'ai jamais réussi à dépasser le PID 25000.

J'ai trouvé un outil appelé HighPid (http://winprogger.com/?p= 29) mais malheureusement, il ne semble pas tenir ses promesses. Alors quelqu'un a-t-il un outil similaire (mais fonctionnel), ou un autre truc pour forcer un PID élevé sur un serveur Windows?

+2

Pourquoi ne pas faux le grand PID dans votre code? –

+0

Je ne voulais pas ajouter de code de test supplémentaire à une application VB6 déjà croustillante qui est mise au rebut dès que nous pouvons obtenir une nouvelle application fonctionnant dans .Net. C'est juste pour nous aider dans le processus. – Grubsnik

Répondre

2

Lancez 32767 procédés fictifs vraiment légers? ;-) 100kb * 32k = 3.2Gb, donc RAM ne devrait pas vous limiter.

+1

En fait, vous n'auriez pas besoin de beaucoup de processus car Windows n'utilise actuellement que des identifiants de processus qui sont des multiples de quatre (http://blogs.msdn.com/b/oldnewthing/archive/2008/02/28/7925962.aspx) –

+0

On dirait que Windows vous limite à 1947 threads par ID de processus, ce qui signifie que j'ai dû lancer plusieurs instances de mon application de test. – Grubsnik

1

Vous pouvez regarder d'un autre point de vue et l'instrument de la fonction qui récupère l'identifiant du processus, quelque chose comme (pseudo-code):

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

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