2009-08-28 14 views
5

Tengo un servicio de Windows muy simple que está desarrollado en vb.net 2008. Cuando intento depurarlo yendo a herramientas-> Adjuntar para procesar aunque veo mi servicio, está deshabilitado y Tipo de administrado y no puedo seleccionar el proceso.No puedo adjuntar ventanas Proceso de servicio

¿Cómo debo depurar mi servicio?

Gracias

+0

He actualizado mi respuesta basada en su pregunta. –

Respuesta

10

Adjuntar al servicio debe funcionar, así que no estoy seguro de por qué no puede. En lugar de eso, inserte la siguiente línea en el punto de entrada de la aplicación para su servicio de Windows (o el método OnStart()), compile en modo de depuración e inicie el servicio.

System.Diagnostics.Debugger.Break(); 

Al iniciar el servicio, se le pedirá que depure el proceso. Seleccione el depurador de Visual Studio 2008 y el proceso se cargará y se detendrá en su punto de interrupción programático. Presione F5 para comenzar a correr nuevamente.

EDIT:

Digamos que usted ha construido el servicio (modo de modo de disparo o de depuración - no importa) y se utiliza installutil para instalar el servicio, pero no han comenzado todavía. Siempre que el servicio sea no en ejecución, puede seguir realizando cambios de código y volver a compilar. Cuando comienza el servicio, su servicio reflejará los cambios de código más recientes. Si el servicio está en ejecución, no podrá compilar completamente el servicio porque los exe/dll (s) están en uso y no pueden ser reemplazados. Obviamente, simplemente detenga el servicio, vuelva a compilar y luego reinicie el servicio. El punto es este: No tiene que desinstalar el servicio para modificar el código. Basta con detenerlo, cambiar el código, volver a compilar y reiniciar.

En cuanto a la depuración en el modo de depuración frente a versión, no sé si es por eso que no puede adjuntar al proceso.Sé que es posible depurar las versiones de lanzamiento, pero no recomendaría esto simplemente porque si las optimizaciones están activadas, puede encontrar problemas al atravesar el código. Solo hemos utilizado la depuración en modo de lanzamiento como último recurso.

De forma predeterminada, cuando crea una aplicación de Visual Studio en modo de depuración, se coloca en un subdirectorio bin \ Debug de su proyecto. Cuando construye en modo de lanzamiento, el ejecutable se coloca en un subdirectorio bin \ Release. Cuando utiliza installutil para instalar su servicio, lo único que importa es dónde reside el servicio. En su caso, le sugiero que desinstale la versión en modo de lanzamiento de su servicio (installutil /u c:\myapp\myapp\bin\release\myapp.exe), colocando el punto de corte programático, construyendo la versión de depuración y luego usando installutil para instalar la versión de depuración (del directorio bin \ Debug) .

Lo siento, esto fue largo. Espero que eso esté claro.

+0

Gracias Matt. Tengo una pregunta. Aquí esta lo que hice. Construyo la aplicación en modo de lanzamiento. fue a instalar util y lo instalo con algo como installutil c: \ myapp \ myapp \ bin \ release \ myapp.exe ¿Quiere decir que debería haberlo construido en modo de depuración y luego usar installutil c: \ myapp \ myapp \ bin \ debug \ myapp.exe y luego intenta adjuntar al proceso? –

+0

Sí, debe compilar en modo de depuración e instalar desde la carpeta bin \ debug. –

0

Un servicio es nada más que una aplicación de consola por lo que debe ser capaz de ejecutar el exe desde la línea de comandos, siempre y cuando se compila en modo de depuración. Una vez que el proceso se esté ejecutando desde la línea de comando, entonces irás a Debug => attach para procesar en Visual Studio y lo vincularás al exe que acabas de activar desde la línea de comando. También podría ejecutar dentro de Visual Studio IDE directamente con F5.

Si su servicio se ejecuta bajo una cuenta de usuario especial, necesitará usar el comando runas/user para iniciar Visual Studio si está depurando en Visual Studio o desde la línea de comandos si lo está ejecutando desde el comando línea.

Si esto no funciona ... házmelo saber.

Best Regards, Michael

3

¿Seguro que está buscando en su proceso de servicio real? Compruebe el nombre del servicio: ¿es algo así como servicename.vshost.exe? Si es así, entonces ese no es su servicio, sino un proceso de alojamiento de estudio visual utilizado para la depuración F5 (entre otras cosas).

Para depurar su servicio, seleccione la casilla "Mostrar procesos de todos los usuarios". Debería ver el proceso de servicio real, servicename.exe, en la lista de procesos. Si es visible, solo conéctate a ese proceso.

+0

Sí Tuzo Veo únicamente serveename.vshost.exe y no vshost.exe. donde crees que es el problema –

+0

Ignora cualquier proceso con vshost.exe, ya que no puedes depurar esos. ¿Marcó "mostrar procesos de todos los usuarios"? Si lo hizo, debería ver su proceso de servicio como servicename.exe. Si no lo ve allí, entonces probablemente significa que su servicio no se inició. Prueba a comenzar el servicio. –

15

Si sigue el "tutorial" básico de creación de servicios de Windows en MSDN, se encontrará con esto. Verá MyNewService.vshost.exe en el cuadro de diálogo Adjuntar al proceso, pero se deshabilitará. Para ver su servicio, debe verificar "Mostrar procesos de todos los usuarios" Y "Mostrar procesos en todas las sesiones" para ver su servicio. El servicio se ejecuta con el nombre de usuario "SISTEMA", si siguió las instrucciones en el tutorial y los servicios generalmente se ejecutan en una sesión diferente.

Una vez que haya marcado ambas casillas (e ignore MyNewService.vshost.exe), verá MyNewService.exe, que podrá seleccionar y depurar.

Por supuesto, nada sucederá hasta que el servicio llegue a un punto de interrupción. Puede crear el controlador OnPause (como OnContinue), pero para poder pausar su servicio, deberá establecer el indicador CanPauseAndContinue en su servicio (el mismo objeto que el indicador AutoLog).

Además, en mis pruebas en mi máquina de 64 bits, simplemente volver a compilar el proyecto no permitió una depuración exitosa. Incluso la compilación y la reinstalación no funcionaron. Tuve que volver a compilar el proyecto, luego volver a compilar el proyecto de configuración y luego volver a instalar la configuración para poder depurar el servicio.

Finalmente, el Registro de eventos se puede ver a través del Visor de eventos, en Herramientas administrativas en el Panel de control. El "MyNewLog" se encuentra en Registros de aplicaciones y servicios, cuando se crea como se describe en el tutorial de MSDN.

+0

"Una vez que marque ambas casillas (e ignore MyNewService.vshost.exe), verá MyNewService.exe" - realmente me salvó el día. – user979189

1

No solo tuve que seleccionar las casillas de verificación show processes from all users y show processes in all sessions; También tuve que hacer clic en el botón Select y luego elegir el código Managed.

enter image description here

Cuestiones relacionadas