0

Java アプリから Visual Studio ソリューションを開く必要があります。この VS プロジェクトを開く前に、まだ開いていないことを確認したいと考えています。

私は2つの解決策について考えました:

1 つ目は、VS .sln ファイルが別のプロセスによってロックされているかどうかを確認することです (この質問への回答を参照してください)。このソリューションの問題は、誰がファイルをロックしているのかわからないことです。メモ帳、ファイルエクスプローラー(コピー時)などの他のアプリケーションである可能性があります。

2. 実行中の VS プロセスを見つけて、この特定のソリューションが引数としてそれらのいずれかに送信されたかどうかを確認します (VS によって開かれたことを意味します)。コードは次のとおりです。

Process p = Runtime.getRuntime().exec("wmic process where caption=\"devenv.exe\" get commandline");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null){
        if(line.trim().contains(solutionPath))
               //the VS solution is already open
      }

問題は、このwmicコマンドの出力が次の形式であることです。<devenv.exe path> <VS project path>この VS プロジェクト パスは、ソリューション ファイルではなくプロジェクト ファイルなどを参照する相対パスにすることができます。たとえば、プロジェクトC:\Users\username\My Documents\Visual Studio 2012\Projects\ProjectName\ProjectName.slnとコマンド ラインを開く必要がある場合は、 wmic は"<devenv.exe path>" "C:\Users\username\Documents\Visual Studio 2012\Projects\ProjectName\ProjectName.vcxproj"、両方のパスが同じ VS プロジェクトを参照していますが、それはわかりません。

編集: Visual Studio が開いているときにソリューション ファイルをロックしないことがわかったので、最初のソリューションは適用できません。以下のコメントでわかるように、VS 内で開いたり閉じたりしたプロジェクトが正しく表示されないため、2 つ目はオプションではありません。だから私は別の方法が必要です。

何か案が?

4

2 に答える 2

0

絶対確実ではありませんが、上位のウィンドウ タイトルを列挙して、「SolutionName - Microsoft Visual Studio」を確認できます。

于 2015-12-29T01:41:51.927 に答える
0

Visual Studio は、実行中の Visual Studio インスタンスを取得し、dte.Solution.FullName プロパティを確認するために使用できる COM インターフェイスを提供します。たとえば、Visual Studio IDE の外部で EnvDTE.DTE インスタンスを取得する を参照してください。

于 2015-12-29T01:49:58.590 に答える