Pergunta

Eu tenho um aplicativo C # que é lançado via linha de comando. Normalmente dados é passar através da linha de comando como add (app -a string). Gostaria apenas uma instância do aplicativo para ser aberto e se mais cordas são adicionados via linha de comando i gostaria que a única instância de saber sobre ele e se atualizar. I pode colocar os dados no banco de dados corretamente e msg a instância em execução ou msg e passar os dados para a instância em execução e deixá-lo colocá-lo no db e atualizar-se.

Como eu iria fazer isso em C # .NET? (3.5)

Foi útil?

Solução

A primeira instância do aplicativo deve criar um pipe nomeado, as instâncias subsequentes do aplicativo não seria suficiente para criar o mesmo pipe nomeado e deverá vez tentar abrir o pipe nomeado para o uso. Uma vez aberta, a string (ou realmente quaisquer dados) pode ser transferido para a instância já em execução do aplicativo. O pipe nomeado pode então ser fechada e o aplicativo pode sair.

Como alternativa, você poderia usar .NET Remoting e registrar um tipo bem conhecido que outras instâncias do aplicativo poderia ativar, com comportamento semelhante ao que é descrito acima.

Em última análise, uma rápida pesquisa na "IPC" ou "Inter-Process Communication" pode abrir outras alternativas. Mas acredito que a abordagem pipe nomeado é o mais limpo e seria o mais fácil de implementar / estender.

Para "primeira execução" detecção você também pode criar um mutex nomeado, no caso de você optar por um mecanismo IPC que não apresentam uma condição de falha no múltiplo-runs (por exemplo, usando um banco de dados como um meio-homem para a parte de dados). Não há dois processado pode "criar" um mutex com o mesmo nome, esta é a mesma restrição como com Pipes nomeados, como esses nomes são geridas pelo Kernel (e, portanto, do processo de amplitude, de sessão, desktop e janelas estação limites.)

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