Executa várias instâncias de qualquer aplicativo do Windows

10

Suponha que algum autor tenha imposto sua aplicação do Windows para ser uma instância única. Existe alguma maneira de fazer várias instâncias deste aplicativo (além de executar dentro de uma máquina virtual ou solicitar que o autor reescreva o aplicativo)?

Se houver uma ferramenta pronta, eu gostaria de saber. (Eu tentei sandboxie e Altiris SVS sem sorte).

Se não houver nada lá fora, quero programar uma ferramenta / hack que me permita fazer isso. Eu estou procurando indicadores por onde começar - o que estará envolvido, quais habilidades seriam necessárias. Eu tenho habilidades moderadas de programação em C e Java.

Se isso não puder ser feito, explique o motivo.

EDIT: Eu sei que é uma má idéia, mas eu ainda preciso fazer isso (por várias razões). Eu quero uma maneira genérica que funciona para qualquer aplicativo e não introduz erros.

    
por Jus12 20.07.2010 / 20:54

5 respostas

2

Muitos aplicativos verificam a lista global de processos (com EnumProcesses, OpenProcess, GetModuleBaseName e funções semelhantes) ou lista de janelas (com EnumWindows, EnumChildWindows).

Você pode tentar definir o hook (ver exemplos SetWindowsHookEx, CallNextHookEx, etc) para ligar essas chamadas de função API específicas desse aplicativo e substituir os dados solicitados em resposta aos seus para enganar o aplicativo.

    
por 20.07.2010 / 21:19
3

Não há uma maneira genérica, pois aplicativos diferentes usam métodos diferentes. Um pequeno número de aplicativos faz isso simplesmente por "usabilidade", mas para muitos outros, pode haver uma boa razão para impor singletons. Ignorar isso pode levar à corrupção de dados ou simplesmente não funcionar.

    
por 20.07.2010 / 23:34
3

Você pode executar o aplicativo em contas de usuários diferentes e a verificação de instâncias não funcionará mais.

    
por 25.06.2012 / 12:10
2

É possível!

Aqui está uma imagem de minha meia-vida em execução 1 4x em 4 janelas todas conectadas ao mesmo servidor da LAN, o único problema é que os controladores não estão independentemente vinculados a cada janela.

http://img29.imageshack.us/img29/5642/yc0y.jpg

Para fazer isso, você precisa do 'Process Explorer' - um programa que permite que você faça o que é conhecido como 'Close Handle' no subprocesso '\ BaseNamedObjects \ ValveHalfLifeLauncherMutex' ou algo assim. não é tão difícil. vá aqui para instruções detalhadas - link

Mas sim, isso é para a meia-vida, mas pegue o Process Explorer e tenha certeza de que você será capaz de descobrir qual handle / processo você precisa fechar para obter os programas que você deseja executar várias vezes.

Eu não vejo por que o Windows não implementa jogos em execução várias vezes em splits / snaps como um recurso de qualquer maneira! é claro porque as pessoas não comprariam tantos PCs ... também verifique o SoftXSpand realmente incrível, permite que você execute múltiplas instâncias de janelas como usuários independentes

    
por 21.11.2013 / 15:22
1

Arquivos de bloqueio, pipes nomeados e eventos de sincronização são algumas das formas comuns que os aplicativos usam para verificar se são a única instância em execução. Para contornar os arquivos de bloqueio, você teria que virtualizar o sistema de arquivos, conectá-lo ou fazer uma exclusão cuidadosamente cronometrada (e isso pode não funcionar se também bloquear o arquivo). Canais nomeados e eventos de sincronização serão muito mais difíceis porque você não tem o mesmo controle de fora do aplicativo que você faz com arquivos.

    
por 20.07.2010 / 23:48