2011-04-27 12 views
22

Mi solución tiene varios proyectos, uno de los cuales es un servicio de Windows; Tengo un paso previo a la compilación para detener el servicio y un paso posterior a la compilación para reiniciarlo (de este modo, el servicio exe de Windows no está bloqueado cuando VS está compilándolo/sobreescribiéndolo).Deglución de errores en los pasos previos a la construcción en Visual Studio 2010

on pre-build: 
net stop myservice 

on post-build: 
net start myservice 

Si el servicio no está en ejecución, mientras que estoy empezando la construcción, el comando net stop falla y que impide la acumulación de proceder.

¿Qué puedo hacer para forzar aún la compilación incluso si el paso de precompilación falló?

Respuesta

39

lo he descubierto - sólo hay que añadir la siguiente declaración al final :

SET ERRORLEVEL = 0 

o simplemente:

EXIT 0 
-2

¿Insertar el comando en un ejecutable que siempre devuelve 0 resuelve su problema?

en la llamada c

system("net stop myservice") 
+0

No le gustó - Error 9009 – Andrey

19

Sé que esta es una publicación anterior, pero recientemente tuve este problema también. Quería matar el proceso que se estaba construyendo si se estaba ejecutando actualmente, y descubrí que podía hacer:

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

2>nul 1>nul sin Exit 0, o viceversa, no parece funcionar. Tengo que hacer ambas cosas.

También digno de mención es usando Visual Studio Express 2012.

he encontrado la solución cuando se mira en este tema, así on this blog

El 2> nul 1> nul se tragará el stderr y stdout desde el comando. La EXIT 0 se asegurará de que el evento de compilación retorne 0.

+1

que trabajó para mí con VS2013 – codea

+0

Esto es exactamente lo que yo estaba tratando de hacer. Un bit adicional de información: me parece que 'EXIT 0' en un archivo por lotes, llamado desde una acción de compilación VS2015 con' CALL myscript.bat', hará que la acción completa salga en lugar de continuar después de 'myscript.bat'. Pero esto se soluciona usando 'SET ERRORLEVEL = 0' en su lugar. –

+0

o mejor solo '' '2> nul & set errorlevel = 0''' Esto le permite tener líneas adicionales más adelante.No hay necesidad de redireccionar stdout '' '1> nul''' –

1

No hay necesidad de volver a redirigir stdout, solo stderr. Además, set errorlevel le permite tener líneas adicionales más adelante si lo necesita. La salida terminará inmediatamente.

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

Obras en VS 2017.

Cuestiones relacionadas