¿Cómo ejecutar varias veces el mismo programa?

Iniciado por ambigus9, 16 Agosto 2014, 20:38 PM

0 Miembros y 1 Visitante están viendo este tema.

ambigus9

He probado SandBoxie y sólo deja 2 veces...No más y si intento ejectuar desde otra SandBox...cosume toda la RAM y sale pantallazo azul :( ¿Qué me recomiendan?

engel lex

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

ambigus9

Si pero no son livianas....y ya probé con VirtualBox y VMWare y son muy pesadas...y VirtualBox me manda error y se cierra y el otro tengo que instalar un Sistema Operativo entero y la idea es correr el programa y acceder a carpetas del Disco Duro del Operativo original ( Windows 7 )

El programa es MEGASync...la idea es correrlo varias veces con diferentes cuentas y eso se puede hacer con SandyBoxie pero sólo 2 veces :( No más :(

¿Alguna sugerencia en particular?

scott_

Una máquina web. Un sistema en la web, con un buen procesador te corre bien.

Un Cordial Saludo  ;D
Si no intentas salvar una vida, jamás salvarás la de nadie más

Eleкtro

#4
Buenas

Primero de nada:

· ¿Que es lo primero que debes hacer antes de acudir a un foro?:
  Acudir al servicio de soporte de la aplicación, al email del autor, para pedirle que implementen la multiple instancia, o pedirle información sobre el tipo de limitación que usaron, o algo que te pueda ayudar, ya que nosotros no somos magos.




Cita de: ambigus9 en 16 Agosto 2014, 22:29 PM¿Alguna sugerencia en particular?

Aparte de que seguramente haya alguna buena razón (ideada por el desarrollador) por la cual limitar la aplicación a 1 única instancia, hay varias formas de llevar a cabo esta limitación, por ejemplo:


  • Usando un MUTEX
  • Comprobando el nombre del proceso en la lista de procesos activos.
  • Comprobando la existencia de un archivo local específico.
  • etc, etc, etc..

Te preguntarás: "¿Y que?", pues que la dificultad de una posible solución varia dependiendo de cual sea la forma que el desarrollador empleó, por ejemplo:

· Si está comprobando el nombre del proceso en la lista de procesos activos:
Con hacer copias del executable y renombrar el nombre de cada archivo sería suficiente.

· Si está comprobando el nombre del proceso en la lista de procesos activos:
Sería suficiente con eliminar el archivo antes de cada inicio de los posteriores procesos.

· Si usó una detección vía MUTEX:
 1. Si quieres una solución temporal deberás isolar el proceso en un espacio virtual (SandBox), por ejemplo con sandboxie.

 2. Otra solución temporal y sin virtualización sería cerrar el/los Handle(s) relacionados con el MUTEX, esto puedes averiguarlo y hacerlo de forma sencilla con la aplicación ProcessExplorer de SysInternals.
  Nota: En caso de ser un ensamblado .NET y que el desarrollador haya implementado la detección por MUTEX desde las opciones de VisualStudio (y no de otra forma más manual), deberás cerrar unos 4 o 5 Handles cuyos nombres contienen las palabras clave "MUTEX" y "BaseNamedObjects".

 3. Si quieres una solución definitiva, creo que haría falta conocimientos de ingenieria inversa para desensamblar la aplicación, buscar la instrucción relacionada con el MUTEX y realizar los cambios necesarios para que permita múltiples instancias.





En fín, cuando desarrollas una aplicación puedes modificarle su identificador único, y la característica principal de una aplicación single-instance es NO permitir más de una instancia de un proceso que tenga el mismo identificador.

Creando un SandBox (como hace la aplicación SandBoxie o cualquier virtualizador de aplicaciones) estarás creando un espacio virtual de memoria donde ejecutar ese proceso de forma aislada al resto, por lo tanto puedes ejecutar la aplicación tanto en el Host como en el SandBox sin que el Identificador de los dos procesos "colisionen", aunque la verdad es que no tengo muy claro el motivo, no se si es que quizás estos programas modifican de alguna manera el contexto del proceso hijo (la app single-instance) para que puedan heredar el identificador del proceso padre (el virtualizador) de alguna manera abstracta o algo parecido, no lo sé, pero claro, si intentas ejecutar la misma aplicación dos veces en el mismo espacio virtual del SandBox... pues pasa lo que ya he explicado, se detecta el MUTEX.





⇲ Documentación:
· Globally unique identifier (GUID)
· Mutual exclusion (MUTEX)

⇲ Utilidades:
· Process Explorer








quiAnar

Gran respuesta Eleкtro de mucha utilidad muchas gracias.
"En caso de duda, utiliza la fuerza bruta"