Мне нужно открыть решение Visual Studio из приложения java, и я хочу убедиться, что этот проект VS еще не открыт до его открытия.Проверьте, открыт ли проект Visual Studio
Я думал о 2 решения:
One, проверить, если VS .sln файл заблокирован другим процессом (см ответы this question). Проблема с этим решением заключается в том, что я не знаю, кто блокирует файл, это может быть любое другое приложение, такое как блокнот, файловый обозреватель (при копировании) и т. Д.
Два, найдите запущенные процессы 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, но я этого не знаю.
EDIT: Я просто нашел, что Visual Studio не блокирует файл решения, когда он открыт, так что мое первое решение не применяется. и, как вы можете видеть в комментариях ниже, второй вариант не является вариантом, поскольку проект, открытый или закрытый в VS, не будет отображаться правильно. Поэтому мне нужно по-другому.
Любая идея?
Со вторым вариантом, что произойдет, если вы запустили Visual Studio без аргументов, а затем открыли проект изнутри? Я не думаю, что это проявилось бы ... –
Вы правы. И та же проблема будет, если я запустил Visual Studio с аргументами, а затем закрою проект изнутри - он будет показан в командной строке, хотя проект близок. Поэтому мне нужно другое решение. – user3114639
Похоже, у вас мало выбора. В какой ситуации кто-то другой, помимо Visual Studio, имеет блокировку в файле проекта? –