0

我需要从 java 应用程序打开一个 Visual Studio 解决方案,并且我想在打开它之前确保这个 VS 项目尚未打开。

我想到了2个解决方案:

一,检查VS .sln文件是否被另一个进程锁定(请参阅此问题的答案)。这个解决方案的问题是我不知道谁在锁定文件,它可以是任何其他应用程序,如记事本、文件资源管理器(复制时)等。

二,找到正在运行的 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 中打开或关闭的项目将无法正确显示。所以我需要一种不同的方式。

任何想法?

4

2 回答 2

0

并非万无一失,但您可以枚举顶部窗口标题并检查您的“SolutionName - Microsoft Visual Studio”。

于 2015-12-29T01:41:51.927 回答
0

Visual Studio 提供了一个 COM 接口,可用于获取正在运行的 Visual Studio 实例并检查 dte.Solution.FullName 属性。例如,请参阅在 Visual Studio IDE 之外获取 EnvDTE.DTE 实例

于 2015-12-29T01:49:58.590 回答