2009-09-03 16 views
13

que estoy haciendo el recorrido en el siguiente enlace: http://msdn.microsoft.com/en-us/library/zt39148a%28VS.80%29.aspxC#: servicio de Windows simple da como excepción de seguridad

He seguido exactamente, línea por línea. Instalé el servicio con éxito, sin embargo, cuando trato de ejecutarlo, aparece el siguiente mensaje de error:

"Se produjo una excepción no controlada (" System.Security.SecurityException ') en MyNewService.Exe [5292].

He visto que para muchas personas funciona, pero algunas personas obtienen esta excepción, aunque no pude encontrar una respuesta. ¿Alguien tiene alguna idea? Gracias.

+0

¿Qué identificación está utilizando? ¿Le ha concedido iniciar sesión como un derecho de servicio? – serialhobbyist

+0

¿Tiene la línea de código donde se produce el error en el mensaje de error? Eso dará una pista sobre dónde se está produciendo la excepción y permítanos brindarle respuestas más específicas. – David

+0

La excepción se produce en: System.Diagnostics.EventLog.CreateEventSource ("MySource", "MyNewLog"); Y la excepción es: "No se encontró la fuente, pero algunos o todos los registros de eventos no se pudieron buscar. Registros inaccesibles: Seguridad." – sbenderli

Respuesta

18

El método EventLog.SourceExists es lo que causará esta excepción. La razón más común es que intenta acceder a TODOS los registros de eventos (incluido el registro de seguridad) que de forma predeterminada en Vista no tendrá permisos. Otra razón puede ser si la fuente que está buscando no se encuentra en el registro de eventos (¡que me parece bastante extraño!).

Una solución alternativa:

bool sourceFound = false; 
try 
{ 
    sourceFound = EventLog.SourceExists("MySource"); 
} 
catch (SecurityException) 
{ 
    sourceFound = false; 
} 

Otra opción es simplemente elevar sus permisos, sin embargo, a medida que donde siguiendo el tutorial paso a paso su servicio se ejecuta en la cuenta LocalService (que volvió a ganar' t tienen permisos para este método en particular). Por lo tanto, encontrará en la documentación de MSDN que la solución es verificar si el origen del evento existe en ServiceInstaller y si no lo tiene, cree el origen en el instalador.

+0

gracias, esto funciona perfectamente! – sbenderli

+0

No tuve problema, tuve el mismo problema, así que hice una pequeña investigación y parecía que esta era la causa. La razón por la que parece funcionar en el instalador, tendrá que elevar sus permisos para que tenga los privilegios correctos en ese punto. – James

+0

buen ejemplo de cómo codificar el instalador http://blog.kappasolutions.ca/blog/post/2010/07/ 04/How-To-Create-a-Custom-Event-Log-in-Windows-7.aspx – Sergio

0

Ir obtener una copia de Process Monitor y ver lo que sucede - usted debe conseguir la edición de aparecer como resultado el fracaso y se puede investigar a partir de ahí ...

de edición: Para aclarar, es una herramienta gratuita de Microsoft (sysinternals) y hace lo que dice en la lata :)

+0

Hice lo que sugirió, pero cuando trato de iniciar el servicio, no aparece nada en Process Monitor con el nombre MyNewService ... ¿lo llamaría otro servicio? – sbenderli

1

¿Es usted un administrador local en su máquina? Si es así, ponga la siguiente línea de código en la parte superior del constructor de su servicio de ventanas:

System.Diagnostics.Debugger.Break(); 

Cuando el servicio comienza a correr, que va a ir a este punto de interrupción, lo que le permite saltar en Visual Studio. Luego puede depurar desde allí hasta que descubra dónde se produce la excepción.

0

Solo supongo: ¿su archivo .exe se encuentra en una carpeta de red? ¿O está marcado como "descargado de Internet"? Porque, en esos casos, .NET Framework le asignará menos permisos que cuando estaba directamente en una unidad local y no se marcó como descargado de Internet.

+1

El exe está realmente instalado en la computadora. Hice el instalador como se describe en la página original de Microsoft. – sbenderli

+0

por lo que sé que el instalador no le impide instalar el servicio en una carpeta en un recurso compartido de red. Tal vez eso cambió en 2008, no tengo el 2008 prof disponible aquí, solo 2008 express (no puedo construir proyectos de configuración) y 2005 prof. – mihi

+0

He verificado dos veces y la instalación es local y no en una carpeta de red. – sbenderli

Cuestiones relacionadas