Глотание ошибок на этапах предварительной сборки в Visual Studio 2010 - PullRequest
28 голосов
/ 27 апреля 2011

Мое решение имеет несколько проектов, одним из которых является служба Windows; У меня есть шаг предварительной сборки, чтобы остановить службу, и шаг после сборки, чтобы перезапустить ее (таким образом, exe службы Windows не блокируется, когда VS строит / перезаписывает его).

on pre-build: 
net stop myservice

on post-build:
net start myservice

Если служба не запущена во время запуска сборки, команда net stop завершается неудачно, что не позволяет продолжить сборку.

Что я могу сделать, чтобы принудительно выполнить сборку, даже если шаг перед сборкой не удался?

Ответы [ 5 ]

53 голосов
/ 28 апреля 2011

Я понял - вам просто нужно добавить следующее утверждение в конце:

SET ERRORLEVEL = 0

или просто:

EXIT 0
25 голосов
/ 05 июля 2014

Я знаю, что это старый пост, но недавно у меня тоже была эта проблема. Я хотел убить процесс, который я строил, если он выполнялся в данный момент, и обнаружил, что могу сделать:

taskkill /f /im $(TargetName).exe 2>nul 1>nul
Exit 0

2>nul 1>nul без Exit 0 или наоборот, похоже, не работает. Я должен сделать оба.

Также стоит отметить, что используется Visual Studio Express 2012.

Я нашел решение, когда изучал и эту проблему в этом блоге

2> nul 1> nul поглотит stderr и stdout из команды. EXIT 0 гарантирует, что событие сборки вернет 0.

4 голосов
/ 04 апреля 2017

Нет необходимости перенаправлять стандартный вывод, просто стандартный вывод. Кроме того, set errorlevel позволяет вам иметь дополнительные строки позже, если вам нужно. Выход прекратится немедленно.

taskkill /f /im:$(TargetFileName) 2>nul &set errorlevel=0

Работает в VS 2017.

0 голосов
/ 27 апреля 2011

Оберните ваши net команды в командный файл и используйте exit /B 0

http://ss64.com/nt/exit.html

0 голосов
/ 27 апреля 2011

Разве встраивание команды в исполняемый файл, который всегда возвращает 0, решит вашу проблему?

в вызове

system("net stop myservice")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...