2011-02-01 10 views
9

Esiste un intervallo specifico di ID evento in Windows riservato agli sviluppatori di applicazioni?ID evento di Windows

Sto lavorando a un'applicazione .Net che scriverà errori nel registro eventi di Windows. Questa applicazione è destinata ai server e verrà eseguita come operazione pianificata da amministratori di sistema paranoico che vorranno chiuderli il più possibile (inclusa l'esecuzione con un account di manutenzione privilegi ridotto). L'app non verrà installata formalmente — infatti, non sto nemmeno costruendo un programma di installazione per questo; solo un file zip con il file .exe e app.config.

Ecco il trucco: in Windows, sono necessari i privilegi di amministratore per creare una fonte nel registro eventi applicazioni. Dal momento che non posso contare su questo e non voglio che gli amministratori sys sovraccarichi di lavoro debbano crearne uno, sto usando "Application Error" (usato da MS Office) come fallback. (Scegliere una soluzione alternativa è nella mia lista delle cose da fare, dato che l'ufficio non viene installato così spesso sui server).

Il problema è che voglio ancora che i miei eventi si facciano notare, piuttosto che mascherarsi da Office. In questo modo, i miei amministratori di sistema possono facilmente filtrare solo quegli eventi nel Visualizzatore eventi o l'aggregatore di registri di loro scelta. La soluzione migliore di cui sono a conoscenza al momento sta utilizzando l'ID evento, ma sono preoccupato per il conflitto con gli eventi interni di Windows, soprattutto considerando il mio pubblico di destinazione.

Ho cercato, ma non riesco a trovare alcuna documentazione su questo. Quindi, c'è una gamma specifica di ID evento che dovrei usare, andrò bene a usare qualsiasi cosa, o dovrei considerare un'opzione completamente diversa qui?

+0

So che gli ID di eventi web hanno un intervallo riservato. Per quanto riguarda l'Eventlog in generale, non so. – leppie

risposta

4

Non proprio. Al livello più alto hai una fonte di eventi. Ogni origine evento ha le sue categorie di eventi. Ogni messaggio di evento è "posseduto" da una fonte di eventi e rientra in una delle sue categorie di eventi. Se stai registrando i tuoi eventi sotto la Event Source di qualcun altro, stai violando questa convenzione e potresti avere probabilmente collisioni con ID evento.

D'altra parte, Event IDs sono strutturalmente simili a HRESULT e c'è un bit Customer che è possibile impostare. Esiste anche un campo Codice dispositivo, ma Microsoft fornisce solo una struttura per terze parti (il resto è riservato). Anche se si scherza con questi bit, sei ancora in balia del proprietario della Sorgente degli eventi; se Microsoft dovesse mai di scrivere qualcosa al Origine evento che si sta utilizzando e impostare il bit Cliente o codice Facility (ad esempio forse componenti non Windows quali Office o qualcosa del genere), si sarebbe tornato indietro nello stesso pericolo di collisioni. O se qualche altro sviluppatore decide di fare la stessa cosa che stai facendo. Il modo più sicuro è quello di definire la propria origine evento.

2

Sembra che questo è il nocciolo del problema

mi preoccupa in conflitto con eventi Windows interne, soprattutto se si considera il mio target di riferimento.

Non penso che ci si debba preoccupare perché gli ID evento corrispondono a una specifica Sorgente di eventi, quindi se non si utilizza la stessa fonte esatta non si causerà il disagio dell'amministratore. Ad esempio, MS fa talvolta uses the same ID con diverse fonti.

Se si desidera ottenere informazioni sulle editori registrati e gli ID evento è possibile utilizzare Wevtutil Per esempio questo elencherà gli editori.

wevtutil ep 

Da che è possibile ottenere le ID evento specifici utilizzati per un editore è possibile utilizzare il seguente (Registro eventi è stato utilizzato in questo esempio)

wevtutil gp Microsoft-Windows-EventLog /ge /gm:true 

Se sei bravo a PowerShell I' Sono sicuro che potresti inventare uno script per ottenere tutti gli ID evento che sono registrati

+2

Il problema con l'utilizzo di Event Source di qualcun altro è che il visualizzatore di eventi utilizzerà il corrispondente file di messaggio per formattare il messaggio di errore, quindi i registri degli eventi potrebbero apparire come "Microsoft Outlook ha riscontrato un errore dell'applicazione" o qualsiasi altra cosa quando in realtà il messaggio era generato dal tuo programma. O se si utilizzano ID evento "non utilizzati", l'utente dovrà memorizzarli poiché non ci sarà una stringa corrispondente nel file dei messaggi. Ad ogni modo, non è una buona esperienza utente. – Luke

+0

Vecchio ora, ma il riutilizzo di una fonte di eventi esistente era l'intero punto. La creazione della mia propria origine evento avrebbe richiesto i privilegi di amministratore, ma voglio che l'app sia in grado di funzionare senza i diritti di amministratore, anche al momento dell'installazione. –

Problemi correlati