检查项目是否已由Visual Studio打开



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

我考虑了两个解决方案:

第一,检查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:UsersusernameMy DocumentsVisual Studio 2012ProjectsProjectNameProjectName.sln,而我从wmic得到的命令行是"<devenv.exe path>" "C:UsersusernameDocumentsVisual Studio 2012ProjectsProjectNameProjectName.vcxproj",两个路径都指的是同一个VS项目,但我不知道。

编辑:我刚刚发现Visual Studio在解决方案文件打开时不会锁定它,所以我的第一个解决方案不适用。正如你在下面的评论中看到的,第二个不是一个选项,因为在VS中打开或关闭的项目不会正确显示。所以我需要一种不同的方式。

知道吗?

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

Visual Studio提供了一个COM接口,您可以使用它来获取正在运行的Visual Studio实例并检查dte。Solution.FullName属性。请参见例如在Visual Studio IDE外部获取EnvDTE.DTE实例。

相关内容

  • 没有找到相关文章

最新更新