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
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>
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.
Questo ha aiutato! Completamente trascurato le impostazioni di sicurezza! :) –
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.
Questa soluzione è l'applicazione se si esegue 'wevtutil gp
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. –
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. –
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 assolutiicacls %~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"
Molto utile per diagnosticare l'errore di fondo. –