Como escrever com segurança para um arquivo de log de duas instâncias do mesmo aplicativo?

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

  •  18-09-2019
  •  | 
  •  

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.

Foi útil?

Solução

A Mutex poderia ser usado para sincronização entre processos de um recurso compartilhado, como arquivo de log. Aqui está um amostra .

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top