Limitar um programa a apenas uma instância não é uma função do SO: ele precisa estar codificado dentro do código.
Isso significa que a resposta correta é: depende de como o programa executa a detecção de instância única. Existem várias maneiras de fazer isso:
-
Usando um mutex. Esta é a maneira mais simples e mais comumente usada. Em sua encarnação mais simples, um mutex será limitado ao contexto do usuário atual, o que significa que você pode enganar o programa para executar várias vezes, criando diferentes instâncias de serviços para executar o programa e executar cada um deles no contexto de um usuário diferente. Isso pressupõe, claro, que você pode automatizar o programa completamente. Também é normalmente possível escrever um aplicativo "wrapper" que manipule o mutex e alterá-lo de uma forma que permita que outras instâncias sejam executadas.
-
Verificando o nome do exe na lista de processos. Trivial: renomeie o exe, execute.
-
Bloqueie um arquivo específico. Isso pode ser trivial ou difícil, dependendo da localização do arquivo.
-
Bloqueie um recurso local (porta TCP, etc). Isso geralmente é o mais difícil de ser resolvido, pois não há uma maneira fácil de enganar o aplicativo para não usar esse recurso (especialmente se ele for realmente usado, não apenas bloqueado para impedir a simultaneidade).
Em todos os casos, a coisa mais simples a fazer é pedir aos desenvolvedores que levantem essa limitação.