Pregunta ¿Permitir que un programa en Windows se ejecute varias veces?


Tengo este software heredado que solo te permite ejecutar una copia a la vez, detecta que tienes otra sesión abierta y no te permite abrir una segunda instancia. El problema es que este es un programa intensivo de CPU y solo utiliza un solo núcleo. ¿Hay trucos o modificaciones para que pueda engañarlo y abrir más de una instancia? Esto me permitiría retirar alrededor de 5 servidores ... Estoy usando Windows 2008 R2.

Tuve que usar cff explorer para habilitar el uso de más de 2GB de RAM cuando el programa se bloquea cuando intenta usar más de 2GB.


5
2017-09-11 09:01


origen


Usted debe mirar en la virtualización. - Michael Hampton♦
Obtuve 8 exámenes físicos y 3 virtuales solo para ejecutar este software. Solo quiero asegurarme de que no haya una mejor manera, ya que creo que es un poco excesivo instalar tantos servidores solo para este programa. - lbanz


Respuestas:


Limitar un programa a una sola instancia no es una función del sistema operativo: debe codificarse dentro del código.

Esto significa que la respuesta correcta es: depende de cómo el programa realiza la detección de una sola instancia. Hay varias maneras de hacer esto:

  • Utilizando un mutex. Esta es la forma más sencilla y la más utilizada. En su encarnación más simple, una exclusión mutua se limitará al contexto del usuario actual, lo que significa que puede engañar al programa para que se ejecute varias veces creando una instancia de servicios diferente para ejecutar el programa y ejecutar cada una de ellas en el contexto de un usuario diferente. Esto supone, por supuesto, que puede automatizar el programa completamente. Por lo general, también es posible escribir una aplicación "wrapper" que manipule el mutex y la modifique de una manera que permita que se ejecuten otras instancias.

  • Comprobando el nombre exe en la lista de procesos. Trivial: renombra el exe, corre.

  • Bloquea un archivo específico. Esto puede ser trivial o difícil dependiendo de la ubicación del archivo.

  • Bloquea un recurso local (puerto TCP, etc.) Este suele ser el más difícil de solucionar, ya que no hay una manera fácil de engañar a la aplicación para que no use ese recurso (en particular, si se usa realmente, no solo está bloqueado para evitar la concurrencia).

En todos los casos, lo más sencillo es pedir a los desarrolladores que eliminen esa limitación.


8
2017-09-11 10:03



"En todos los casos, lo más sencillo es pedir a los desarrolladores que eliminen esa limitación". No estaría de acuerdo con eso. Es una aplicación heredada: incluso si la compañía que escribió el software aún existe, es muy poco probable que puedan abrir la fuente para hacer cambios por usted. Como yo y Michael Hampton hemos dicho, la virtualización es probablemente la mejor manera de hacerlo aquí. - Chris McKeown
Intenté cambiar el nombre del archivo .exe y aún se detectó una segunda copia, por lo que probablemente esté usando la exclusión mutua como dijo Stephane. Me puse en contacto con el desarrollador y me dijeron que ya no son compatibles con el software y que mi opción es instalar más copias ya que mi licencia no tiene límite. Parece que tendré que virtualizarlos todos! - lbanz
Según mi respuesta, mire App-V: no necesitará construir múltiples servidores virtuales. - Chris McKeown


Sandboxie no está diseñado con este uso en mente, pero debido a la forma en que ejecuta los procesos en una "botella" virtual, se puede usar para ejecutar múltiples instancias de una aplicación que normalmente solo permitirá que se ejecute una instancia.

Otra opción posible: los programas que solo permiten una sola instancia normalmente lo hacen creando un mutex. Cuando se inicia una nueva instancia, se comprueba la existencia del mutex y se detiene la ejecución si se encuentra. Es posible escribir un programa que pueda iniciar una instancia y luego eliminar su exclusión mutua. Sin embargo, tenga en cuenta que las aplicaciones que no esperan más de una instancia concurrente pueden ser problemáticas con este enfoque, por lo que es preferible cierto nivel de virtualización, solo para que cada instancia no sepa o interactúe con otras.


4
2017-09-11 10:47



+1 Si es una aplicación de red, puede vincularse al mismo puerto local cada vez. - gravyface


App-V posiblemente te ayude aqui Le permite ejecutar varias instancias del mismo programa virtualizado, cada una aislada de la otra.


3
2017-09-11 09:43





Ctrl + Shift + Doble Clic Icono de acceso directo de la aplicación

Se abrirá Nueva Instancia de aplicación.


-1
2018-03-21 07:30



Lee las otras respuestas para entender por qué tu respuesta es falsa. - Sven♦
Te perdiste un breve tutorial sobre cómo descifrar los límites de la aplicación con algo como IDA, después de lo cual se iniciaría fácilmente como sugeriste :) - Anubioz
Bienvenidos a la comunidad. Le recomiendo que elimine su respuesta ya que no es una respuesta técnica, y no es lo que el OP estaba buscando. Te deseo suerte y éxito :) - FarazX