2009-04-02 19 views
2

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

現在、インストールする前にVisual Studioのすべてのコピーを閉じなければならないと伝えますが、私はそれが絶対確実であることを望みます。 Visual Studio(devenv.exe)のコピーが実行されている場合に誰かが.msiを実行したかを確認し、プロジェクトをインストールできないようにする方法を教えてください。

答えて

2

のWiXツールセットがCloseAppsのCustomActionを持っているプロセスを実行して列挙させることができます。残念ながら、すべてのアプリケーションを閉じるためのリストは表示されませんが、コードは開始するのに合理的な場所になります。

0

あなたはあなたのプロジェクトでインストーラクラスを作成し、それはあなたのためにウィンドウを閉じます

+0

インストーラclasssesは厄介です。 –

2

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

あまりにも多くの作業がある場合は、WindowsコマンドTASKKILLを使用してアプリケーションを終了するのが邪魔になります。絶対確実ではありませんが、何よりも優れています。

+0

+1は/ F;) – JeffH

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; 
     } 
+0

+1ですが、すべてのdevenvがシャットダウンされるまで、ユーザーがインストールをキャンセルするのではなく、一時停止することをお勧めします。 – JeffH

関連する問題