Forçar um aplicativo a ser uma única instância

Forçar um aplicativo a ser uma única instância

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, quero poder fazer isso sem precisar substituir o aplicativo real por um stub, mas não me importaria de usar um se for realmente necessário.

Responder1

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

  • crie um "instalador falso" que é apenas um pequeno invólucro em torno do aplicativo que você deseja iniciar
  • torne esse instalador um singleton. Veja aquiPermitir apenas uma instância do instaladorouVerifique se seu aplicativo está em execução
  • inicie seu aplicativo a partir desse "instalador de wrapper". Veja aquiPlug-in ExecCmd
  • "ocultar" o ícone normal do aplicativo do usuário e apresentar aquele instalador falso. Como você pode adicionar um ícone bonito a ele, você poderá fazer com que se pareça com o programa original.

Responder2

A menos que haja uma solução alternativa, você pode aplicar com oKit de compatibilidade de aplicativosque permite isso – o 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_Processobjetos – 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 múltiplas instâncias de si mesmo, portanto o mecanismo de detecção precisa de uma correção.

informação relacionada