Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 19013|Resposta: 0

[Fonte] C# permite apenas a escrita correta de uma instância da aplicação para rodar

[Copiar link]
Publicado em 10/12/2016 14:35:34 | | |
Programas C# permitem que apenas uma instância execute o código correto
http://www.itsvse.com/thread-3391-1-1.html
(Fonte: Architect)


O código abaixo também está errado!! Código correto como acima!!


Às vezes, precisamos permitir que apenas uma instância da aplicação seja executada, e quando o processo inicia, se descobrir que uma instância da aplicação está rodando, ela automaticamente para de ser executada. Normalmente implementamos isso na função Main via um mutex Mutex, que geralmente é escrito:

Quando buscamos respostas, muitas vezes entramos e saímos às pressas, ignorando as características e precauções do Mutex. Depois de um teste simples, ok, faça e use. Neste ponto, deixamos de lado um pré-requisito importante:Convenções de nomes Mutex. O método de escrita acima funciona sem problemas sob um único usuário; Em multiusuário, cada usuário pode iniciar uma instância, então uma única instância não pode ser garantida.

Se você precisar usá-lo em um servidor de terminal e permitir apenas uma instância, use o seguinte método:


Aqui está a descrição da MSDN:


Em servidores que executam serviços de terminal, o mutex nomeado do sistema pode ter dois níveis de visibilidade. Se o nome começar com o prefixo "Global\", o mutex fica visível em todas as sessões do servidor de terminal. Se o nome começar com o prefixo "Local\", o mutex só é visível na sessão do servidor de terminal que o criou. Nesse caso, cada outra sessão de servidor de terminal no servidor pode ter um mutex separado com o mesmo nome. Se você criar um mutex nomeado sem especificar um prefixo, ele receberá o prefixo "Local\". Em uma sessão de servidor de terminal, dois mutexes com prefixos de nome diferentes são mutex independentes, e os dois mutex são visíveis para todos os processos na sessão do servidor de terminais. Ou seja, os nomes dos prefixos "Global" e "Local" descrevem o intervalo do nome mutex em relação à sessão do servidor de terminal, não ao processo.






Anterior:O registro de componentes para interoperabilidade COM está desativado
Próximo:Programas C# permitem que apenas uma instância execute o código correto
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com