Windows semble perdre la trace de l’application .NET

Nous avons une application .NET que nous dissortingbuons à nos utilisateurs via un package d’installation MSI. Nous avons des applications C ++ qui s’exécutent chaque matin pour voir si la copie de l’application par l’utilisateur est obsolète et, si tel est le cas, nous supprimons le nouveau fichier MSI et l’installons. Si l’application est en cours d’exécution, nous devons la supprimer afin que nous puissions effectuer la mise à jour.

Notre problème est que de temps en temps, il semble que Windows “perd” notre application. Il ne signalera pas que le processus est en cours d’exécution – même si c’est le cas. Cela nous permettra d’écraser, voire de supprimer, le fichier exécutable en cours d’utilisation sans supprimer l’application.

Peut-être est-ce quelque chose qui est commun – mais nous ne pouvons pas comprendre ce qui se passe! Est-ce que quelqu’un a un aperçu de cette situation?

Il semble qu’une copie temporaire de notre application soit créée et que le programme se lance à partir de cela. Mais si c’est le cas, pourquoi cela n’arrive-t-il pas tout le temps?

EDIT: Dans notre programme, nous utilisons la fonction “EnumProcesses” du Platform SDK, PSAPI.dll, pour énumérer tous les processus en cours d’exécution.

Serait-ce que le script ou l’application s’exécute en tant que programme 64 bits et l’autre en tant que programme 32 bits? Si tel est le cas, alors, sur les machines 64 bits, la vérification de la mise à jour peut se trouver au mauvais endroit pour une application existante et la signaler comme étant manquante?

Quel mécanisme utilisez-vous pour vérifier si le processus est en cours d’exécution ou non?

Essayez d’utiliser quelque chose comme l’explorateur de processus pour voir à partir de quel chemin l’image exécutable est chargée – elle devrait figurer dans la section des modules.