Come scrivere in modo sicuro in un file di log da due istanze della stessa applicazione?

StackOverflow https://stackoverflow.com/questions/1300629

  •  18-09-2019
  •  | 
  •  

Domanda

Ho una domanda che può avere solo 1 istanza in esecuzione in ogni momento, se una seconda istanza viene avviato ha bisogno di essere iscritto per un file di log comune che il primo potrebbe anche fare uso di.

Ho il controllo per quante istanze sono in esecuzione e stavo pensando di semplicemente accedendo al registratore di eventi inizialmente, ma l'applicazione può essere in esecuzione in utente o sistema di contesto e le eccezioni sono gettati quando si tenta di interrogare la fonte eventlog come utente in modo che idea si scartata come i registri di sicurezza sono inaccessibili per l'utente.

Così ho voluto scoprire qual è il metodo più sicuro di avere 2 istanze separate della stessa applicazione in scrittura a un file di log potrebbe essere in grado di garantire sia avere l'opportunità di scrivere.

Io preferirei non usare un quadro ulteriore esistente se evitabile

Qualsiasi aiuto apprezzato.

È stato utile?

Soluzione

Un Mutex potrebbe essere utilizzato per la sincronizzazione tra processi di una risorsa condivisa, come file di log. Ecco un campione di .

Altri suggerimenti

Si può sempre scrivere nel registro eventi di sistema. Nessun blocco o qualsiasi cosa necessaria e il Visualizzatore eventi è più robusto di alcuni danno credito per.

In risposta al tuo commento, un altro utente ha fatto la domanda sulle autorizzazioni di scrittura per il registro degli eventi qui su SO. La risposta legata al l'articolo di MSDN che descrive come eseguire questo.

Vedere questa domanda qui .

È possibile schivare il problema, se si preferisce ...

Se questo è un applicazione di Windows, è possibile inviare la prima istanza di un messaggio e poi appena smesso. Alla ricezione del messaggio, l'istanza originale può scrivere nel file di registro senza problemi.

Perché non usare syslog protocollo ? Questo vi permetterà di consegnare i registri in modo molto basata su standard e flessibile. Il protocollo in sé è abbastanza semplice, ma ci sono un sacco di esempi in rete, per esempio qui . Se la vostra applicazione è destinata per l'uso aziendale, avendo un modo standard di registrazione potrebbe essere un grande vantaggio. (E, non è necessario per mantenere i file sia - diventa un lavoro di un software specializzato che fa proprio questo)

Un modo per incidere sarebbe di memoria mappare il file di log. In questo modo, entrambe le istanze dell'applicazione condividono la stessa immagine di memoria virtuale del file. Poi ci sono una serie di modi di attuazione di un mutex all'interno del file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top