2012-02-09 15 views
13

Necesito ayuda para resolver los recursos del "Proveedor" no accesibles cuando intento crear un proveedor de eventos de Windows. Creo mi archivo de manifiesto con la utilidad ManGen y llamo mi archivo '.exe' como mi mensaje y archivo de recursos. Recopilo el archivo '.rc' con mi archivo exe y se genera el archivo expected..res. Sin embargo, cuando ejecuto wevtutil sigo recibiendo la advertencia 'recursos no accesibles'ADVERTENCIA: no se puede acceder a los recursos del proveedor ejecutando wevtutil

Respuesta

14

Al instalar el manifiesto (por ejemplo wevtutil im manifest.man), debería ver una especie de advertencia si los recursos no están disponibles:

**** Warning: Publisher EventsProvider resources are not accessible. 

Para obtener información adicional, intente recuperar información sobre uno de los editores. Por ejemplo:

c:\...> wevtutil gp <EventProviderName> 
Failed to open metadata for publisher <EventProviderName>. Access denied. 

Ok, lo anterior sugiere un problema de permisos, por lo que vamos a hacer la ruta de acceso y vuelva a intentarlo:

c:\...> wevtutil gp <EventProviderName> 
Failed to open metadata for publisher <EventProviderName>. The specified resource 
type cannot be found in the image file. 

Por lo anterior, parece que el recurso no llegó compilado correctamente

Si va File->Open con VS y abre su exe en el visor de recursos, debería poder ver los recursos compilados. Al menos debe tener una entrada "WEVT_TEMPLATE".

Para el recurso a compilarse correctamente csc, necesita ser aprobado el recurso de la siguiente manera:

csc /win32res:<Resource.res> 
+0

muy útil para diagnosticar el error subyacente. –

12

El DLL se está registrando tiene que tener un determinado conjunto de permisos de archivo. Sospecho que el servicio de registro de eventos se ejecuta bajo la cuenta de "servicio local". Entonces, solo dar derechos de acceso al SISTEMA no es suficiente. Lo resolví por problemas al darle al grupo "USUARIOS" en mi PC "leer & ejecutar" privilegios.

Me encontré con un desagradable problema que me llevó un día rastrear. Compartí la carpeta de trabajo de mi proyecto y luego la compartí. Por alguna razón, esto eliminó los privilegios de acceso de "USUARIOS". Creo que esta es la razón por la que las muestras de seguimiento de eventos en el SDK de Windows copian todos los dlls en una carpeta especial bajo la unidad C e instalan el proveedor desde allí. Cuando crea carpetas en la unidad C, el grupo de USUARIOS tiene acceso automático.

+0

¡Esto ayudó! Completamente ignorado la configuración de seguridad! :) –

7

Tuve exactamente el mismo error, pero la solución fue ligeramente diferente a las otras respuestas que ya se han publicado. Tuve que abrir el archivo de manifiesto y cambiar los atributos resourceFileName y messageFileName para usar rutas absolutas al ejecutable de la aplicación.

+0

Esta solución es una aplicación si ejecuta 'wevtutil gp ' outputs * Error al abrir los metadatos para el editor . ** El sistema no puede encontrar el archivo especificado. *** –

+2

Si los nombres de ruta en el archivo de manifiesto no coinciden con el dll, puede usar las opciones/mf y/rf con rutas absolutas a la ubicación real. También debe asegurarse de que la ubicación también haya otorgado privilegios al grupo de seguridad MACHINE_NAME \ Users. –

+0

Mientras trabajaba en esto para Chrome, seguí recibiendo este error y la única buena solución fue usar/mf y/rf. No entiendo por qué llegué al fracaso (ya funcionó para mí), pero está funcionando ahora. Es curioso que wevtutil.exe no muestre señales de lectura alguna vez desde DLL, cuando rastrea con procmon. Esto hace que investigar esta advertencia sea muy difícil. –

5

Experimenté el problema similar.La solución es

  • uso de rutas absolutas, siempre que sea posible y se mantenga alejado de las rutas relativas
  • asegurarse de que todo el mundo tiene acceso de lectura a manifestar archivos

Si sus archivos de manifiesto son llamados manifest.man y manifest.dll, a continuación,

  • conceder acceso de lectura a todos

    uso

    icacls %~dp0\manifest.* /t /grant Everyone:R

  • rutas absolutas para instalar (%~dp0 variable podría ser utilizado si está utilizando un archivo por lotes)

    wevtutil im %~dp0\manifest.man /rf:"%~dp0\manifest.dll" /mf:"%~dp0\manifest.dll"

Cuestiones relacionadas