Força uma aplicação a ser única instância?

4

Existe uma maneira de forçar um aplicativo no Windows a ser um aplicativo de instância única, ou seja, não iniciar se outra instância do mesmo aplicativo já estiver em execução? Idealmente, eu quero ser capaz de fazer isso sem precisar substituir o aplicativo real por um stub, mas eu não me importaria de usar um, se fosse realmente necessário.

    
por Soumya 29.07.2011 / 10:30

2 respostas

4

normalmente você tem que implementar esse recurso "singleton" diretamente no aplicativo. Se você quiser protegê-lo "de fora", você tem que usar um wrapper que verifica, se você tiver outra instância já em execução. pode haver mais soluções para isso, mas uma vez eu fiz o truque com nsis . a ideia é esta:

  • crie um "instalador falso", que por si só é apenas um pequeno wrapper em torno do aplicativo que você deseja iniciar
  • faça desse instalador um singleton, veja aqui link ou link
  • inicie seu aplicativo a partir desse "instalador de wrapper", veja aqui link
  • "ocultar" o ícone normal do aplicativo do usuário e apresentar o instalador falso. como você pode adicionar um ícone bonito, você deve ser capaz de fazer com que pareça o programa original.
por 29.07.2011 / 11:30
1

A menos que haja uma solução alternativa, você pode se inscrever com o Kit de compatibilidade de aplicativos que permite isso: que duvido (não é o tipo de coisa que quebra a compatibilidade 1 ) - então não há configuração no Windows.

Além de um aplicativo inicializador, a outra abordagem seria monitorar novos processos (por exemplo, eventos de criação de instância WMI para Win32_Process objetos - filtrados por sessão, é claro) e executar alguma ação para bloquear a segunda instância.

1 É claro que uma correção pode ser necessária quando um aplicativo usa um mecanismo não suportado para detectar várias instâncias de si mesmo, portanto, o mecanismo de detecção precisa de um shim.

    
por 29.07.2011 / 11:15