Como escrever com segurança para um arquivo de log de duas instâncias do mesmo aplicativo?
Pergunta
Eu tenho uma aplicação que pode ter apenas 1 instância em execução em cada tempo, no entanto, se uma 2ª instância é lançado ele precisa estar logado para um arquivo de log comum que o primeiro também poderia estar usando.
Eu tenho o cheque de quantas instâncias estão em execução e eu estava pensando em simplesmente registrá-lo com o registrador de eventos inicialmente, mas o aplicativo pode ser executado em usuário ou sistema contexto e exceções são lançadas ao tentar consultar a origem eventlog como um usuário para que ideia é desmantelada como os logs de segurança são inacessíveis para o usuário.
Então, eu queria descobrir o que o método mais seguro de ter 2 instâncias separadas de uma mesma gravação aplicativo para um arquivo de log seria que iria garantir ambos têm a oportunidade de escrever para ele.
Eu preferiria não usar um quadro adicional existente se evitável
Qualquer ajuda apreciado.
Outras dicas
Você sempre pode escrever para o log de eventos do sistema. No bloqueio ou qualquer coisa necessária e o visualizador de eventos é mais robusto do que alguns dão-lhe crédito.
Em resposta ao seu comentário, outro usuário fez a pergunta sobre permissões de gravação para o log de eventos aqui no SO. A resposta ligada ao artigo do MSDN que descreve como realizar isso.
Veja essa pergunta aqui .
Você pode evitar o problema se você preferir ...
Se este é um aplicativo do Windows, você pode enviar a primeira instância uma mensagem e, em seguida, basta sair. Ao receber a mensagem, a instância original pode escrever para o arquivo de log sem quaisquer problemas.
Por que não usar protocolo syslog ? Isso permitirá que você para entregar os registos de uma forma muito baseadas em padrões e flexível. O protocolo em si é bastante simples, mas há uma abundância de exemplos na net, por exemplo, aqui . Se seu aplicativo é destinado para o uso empresarial, tendo uma forma padrão de logging pode ser uma grande vantagem. (E, você não precisa manter os arquivos ou - torna-se um trabalho de um software especializado que faz exatamente isso)
Uma maneira de cortá-lo seria a memória de mapear o arquivo de log. Dessa forma, ambas as instâncias do aplicativo estão compartilhando a mesma imagem de memória virtual do arquivo. Depois, há uma série de maneiras de implementar um mutex dentro do arquivo.