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 つ目はオプションではありません。だから私は別の方法が必要です。
何か案が?