2

私は Visual Studio 2008 用の VSPackage を作成しており、WiX で生成された Msi を使用して展開しています。インストールの最後に、必要に応じて "devenv.exe /setup" を実行して、VS にパッケージを認識させます。ただし、実行中の Visual Studio のコピーがある場合、このコマンドは成功しません。

現在、インストールする前に Visual Studio のすべてのコピーを閉じる必要があると人々に伝えていますが、誰にでもできる方法を望んでいます。Visual Studio (devenv.exe) のコピーが実行されている場合に誰かが .msi を実行したことを確認し、プロジェクトのインストールをブロックするにはどうすればよいですか?

4

5 に答える 5

3
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;
        }
于 2009-06-05T15:40:22.907 に答える
2

WiXツールセットには、ウィンドウを閉じるCloseAppsCustomActionがあります。残念ながら、すべてのアプリケーションを閉じるようにリストを表示するプロンプトは表示されませんが、コードを開始するのが妥当です。

于 2009-04-02T20:23:54.807 に答える
2

あなたの最善の策は、Rob のアドバイスに従い、カスタム アクションをまとめて、プロセスが実行されているかどうかを確認することです。おそらく、実行中かどうかを確認し、閉じてみて、まだ実行中の場合は、再起動をスケジュールし、RunOnce レジストリ キーを介して devenv セットアップを実行します。

それが面倒な場合は、windows コマンドを使用してアプリケーションを終了するというちょっとしたハックがありTASKKILLます。万能ではありませんが、何もないよりはましです。

TASKKILL /IM devenv.exe 
于 2009-04-02T22:51:05.030 に答える
0

プロジェクトにインストーラー クラスを作成し、実行中のプロセスを列挙させることができます。

于 2009-04-02T16:02:39.647 に答える
0

TASKKILL /IM devenv.exe -F を使用してプロセスを強制終了し、cmd を管理者として実行する必要がありました

于 2020-03-11T06:27:08.263 に答える