Question

Je suis en train d'écrire un VSPackage pour Visual Studio 2008, et je le déployer avec un WiX généré Msi. Comme la fin de l'installation, je suis en cours d'exécution « devenv.exe / setup » que nécessaire pour obtenir VS à remarquer mon colis. Cependant, cette commande ne réussira pas s'il y a des copies de l'exécution de Visual Studio.

À l'heure actuelle, je dis aux gens qu'ils doivent fermer toutes les copies de Visual Studio avant d'installer, mais je préférerais être à toute épreuve. Comment puis-je vérifier quand quelqu'un exécute mes .msi si des copies de Visual Studio (devenv.exe) sont en cours d'exécution, et les empêcher d'installer mon projet?

Était-ce utile?

La solution

Le jeu d'outils WiX a une CloseApps CustomAction qui fermer les fenêtres pour vous. Il ne demande pas unfortuantely une liste fermer toutes les applications, mais le code serait un endroit raisonnable pour commencer.

Autres conseils

while(devenvIsRunning()) {} //in main routine of Installer class

static bool devenvIsRunning() //uses this subroutine
        {
            Process[] procList = Process.GetProcesses();
            foreach (Process p in procList)
            {
                if (p.ProcessName == "devenv")
                {
                    MessageBox.Show("An instance of Visual Studio is still running.\nPlease close all open instances of Visual Studio before continuing.");
                    return true;
                }
            }
            return false;
        }

votre meilleur pari est de suivre les advide de Rob et mettre en place une action personnalisée pour vérifier si le processus est en cours d'exécution. Je ferais probablement quelque chose comme voir si elle est en cours d'exécution, essayez de fermer, si elle est en cours d'exécution toujours planifier alors un reboot et la configuration devenv via la clé de Registre RunOnce.

Si ce travail est trop alors un peu d'une bidouille horrible serait d'utiliser la commande Windows TASKKILL pour quitter l'application. Non à toute épreuve, mais il vaut mieux que rien.

TASKKILL /IM devenv.exe 

Vous pouvez créer une classe d'installation dans votre projet et laissez-le énumèrent Exécution des processus

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top