Ответ 1
Я понял это - вам просто нужно добавить в конце следующий оператор:
SET ERRORLEVEL = 0
или просто:
EXIT 0
В моем решении есть множество проектов, одним из которых является служба Windows; У меня есть предварительный шаг, чтобы остановить службу и шаг postbuild, чтобы перезапустить ее (таким образом, exe windows exe не заблокирован, когда VS строит/перезаписывает его).
on pre-build:
net stop myservice
on post-build:
net start myservice
Если служба не запущена, когда я запускаю сборку, команда net stop завершается с ошибкой и предотвращает продолжение сборки.
Что я могу сделать, чтобы по-прежнему форсировать сборку, даже если шаг предварительной сборки завершился неудачно?
Я понял это - вам просто нужно добавить в конце следующий оператор:
SET ERRORLEVEL = 0
или просто:
EXIT 0
Я знаю, что это старый пост, но у меня недавно был этот вопрос. Я хотел убить процесс, который я строю, если он в настоящее время работает, и обнаружил, что могу сделать:
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.
Нет необходимости переделывать stdout, просто stderr. Кроме того, set errorlevel
позволяет вам иметь дополнительные строки позже, если вам нужно. Выход немедленно прекратится.
taskkill /f /im:$(TargetFileName) 2>nul &set errorlevel=0
Работает в VS 2017.
Оберните команды net
в пакетном файле и используйте exit /B 0
Встраивает ли команда в исполняемый файл, который всегда возвращает 0, разрешает вашу проблему?
в c вызове
system("net stop myservice")