2012-02-09 15 views
13

Ho bisogno di aiuto per la risoluzione delle risorse "Provider" non accessibili durante il tentativo di creare un provider di eventi di Windows. Creo il mio file manifest con l'utility ManGen e nome il mio file ".exe" come mio messaggio e file di risorse, compilo il file '.rc' con il mio file exe e viene generato il file previsto.res.Tuttavia, quando eseguo wevtutil continuo a ricevere l'avviso 'risorse non accessibili'AVVISO: risorse non accessibili in esecuzione wevtutil

risposta

14

Quando si installa il manifesto (ad esempio wevtutil im manifest.man), si dovrebbe vedere una sorta di un avviso se le risorse non sono disponibili:

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

Per ottenere alcune informazioni aggiuntive, provare a recuperare le informazioni su uno degli editori. Per esempio:

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

Ok, il suggerisce un problema di autorizzazioni in alto, così permettetemi di fare il percorso accessibile e riprovo:

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

Per quanto sopra, sembra che la risorsa non ha ottenuto compilato correttamente

Se vai a File->Open con VS e apri il tuo exe nel visualizzatore risorse dovresti essere in grado di vedere le risorse che sono state compilate. Dovresti avere almeno una voce "WEVT_TEMPLATE".

per la risorsa da compilare in modo corretto, csc deve essere superato la risorsa come segue:

csc /win32res:<Resource.res> 
+0

Molto utile per diagnosticare l'errore di fondo. –

12

La dll si sta registrando ha bisogno di avere un particolare insieme di permessi dei file. Sospetto che il servizio di registrazione degli eventi venga eseguito con l'account "servizio locale". Quindi non basta fornire i diritti di accesso al SISTEMA. Ho risolto il problema dando il gruppo "UTENTI" sul mio PC "leggi & esegui" privilegi.

Mi sono imbattuto in un brutto problema che ha richiesto un giorno per rintracciare. Ho condiviso la mia cartella di lavoro del progetto e poi la ho annullata. Per qualche motivo questo ha rimosso i privilegi di accesso "USERS". Penso che questo sia il motivo per cui gli esempi di tracciamento dell'evento in Windows SDK copiano tutte le DLL in una cartella speciale sotto l'unità C e installano il provider da lì. Quando si creano le cartelle sotto il drive C, al gruppo USERS viene dato automaticamente l'accesso.

+0

Questo ha aiutato! Completamente trascurato le impostazioni di sicurezza! :) –

7

Ho avuto lo stesso errore ma la soluzione era leggermente diversa dalle altre risposte che sono già state pubblicate. Ho dovuto aprire il file manifest e modificare gli attributi resourceFileName e messageFileName per utilizzare i percorsi assoluti nell'eseguibile dell'applicazione.

+0

Questa soluzione è l'applicazione se si esegue 'wevtutil gp ' output * Impossibile aprire i metadati per l'editore . ** Il sistema non riesce a trovare il file specificato. –

+2

Se i nomi dei percorsi nel file manifest non corrispondono a quelli della dll, è possibile utilizzare le opzioni/mf e/rf con i percorsi assoluti nella posizione effettiva. È inoltre necessario assicurarsi che la posizione abbia concesso il privilegio al gruppo di sicurezza MACHINE_NAME \ Users. –

+0

Mentre lavoravo su questo per Chrome, continuavo a ricevere questo errore e l'unica buona soluzione era usare/mf e/rf. Non capisco perché ho colpito il fallimento (ha funzionato per me prima) ma sta funzionando ora. È strano che wevtutil.exe non mostri segni di lettura da DLL, quando si traccia con procmon. Questo rende molto difficile la ricerca di questo avvertimento. –

5

Ho riscontrato il problema simile.La soluzione è quella di

  • uso percorsi assoluti ove possibile e stare lontano da percorsi relativi
  • assicurarsi che tutti abbiano accesso in lettura di manifestare i file

Se i file manifesto sono chiamati manifest.man e manifest.dll, poi

  • concessione l'accesso in lettura a tutti

    percorsi assoluti

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

  • utilizzare per installare (potrebbe essere utilizzato %~dp0 variabile se si utilizza un file batch)

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