Proceso y parametros

15/09/2009 - 00:21 por Edilberto Arteaga | Informe spam
Hola a todos,
Tengo un ejecutable al que le paso un parametro, pero quiero que si mando a
llamar el mismo ejecutable la segunda vez con un parametro diferente no me
cree otra instancia, pero si que me cambie el valor del argumento.
por ejemplo si mando
miexe.exe valor1 y luego mando miexe.exe valor2 que no cree otra instancia
pero si que actualice el valor1 a valor2
hasta el momento se detectar si el exe ya esta en ejecucion pero no se como
cambiar el parametro
este es mi codigo

[STAThread]
static void Main(string[] args)
{
bool _unico;
string __valor = string.Empty;
if (args.Length>0)
__valor = args[0];

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Mutex app = new Mutex(false, "Balanzas2", out _unico);
if (_unico)
{
Application.Run(new Form1(__valor));
}
else
{
//aqui deberia de cambiar el valor del parametro
}

//Application.Run(new ListUnidades(__valor));
}

Preguntas similare

Leer las respuestas

#6 Edilberto Arteaga
24/09/2009 - 18:42 | Informe spam
gracias por las ideas q me dieron, la opcion q utilice es crear un archivo
de texto y en el hago el intercambio de los datos y me funciona, solamente q
para saber si ha cambiado el archivo le he colocado un timer para estar
revisando si ha cambiado el archivo.


"Miguel" escribió en el mensaje de
noticias:
On 16 sep, 03:56, "Alberto Poblacion" <earthling-
wrote:
"Miguel" wrote in message

news:
On 14 sep, 19:21, "Edilberto Arteaga" wrote:

> Que tal si en lugar de un mutex, tu aplicación registra un window
> message y lo broadcastea junto con el valor.

Efectivamente, el mensaje sería un tipo de comunicación
inter-procesos,
que vale para cumplir el requisito que yo comentaba en un mensaje
anterior
de "se necesita algún mecanismo de comunicación inter-procesos".

Sin embargo hay que tener en cuenta una salvedad, que es un caso en
que
este mecanismo no funcionaría como se espera:

En Windows Vista y Windows 7, hay un mecanismo de seguridad que impide
la
comunicación entre programas con distinto nivel de privilegio (llamado
UIPI - User Interface Privilege Isolation). Esto significa que si
arrancas
la aplicación haciendo doble-click sobre ella (con lo que el UAC te la
ejecuta con permisos de usuario normal), y luego vuelves a ejecutarla con
permisos de administrador (click-derecho, Ejecutar Como Administrador),
entonces te arrancaría una segunda copia porque los mensajes de windows
no
circulan entre las dos versiones. Esto puede ser que te interese o que no
te
interese (a lo mejor sí que quieres permitir dos copias de la aplicación
si
se ejecutan con distintos permisos), pero es algo que hay que tener en
cuenta. En Windows XP este tipo de consideraciones no eran necesarias
porque
no existía el UAC ni el UIPI.



Sí, así es. Lo tenía presente de haberlo leído en la doc de SendMessage
(), y como dice en el remark, puede ser manejado por el programa:
GetLastError() == ERROR_ACCESS_DENIED.

Sí el broadcast no termina en un resultado inteligible se podría
testear si es debido a este error...

Respuesta Responder a este mensaje
#7 Alberto Poblacion
24/09/2009 - 23:14 | Informe spam
"Edilberto Arteaga" wrote in message
news:
gracias por las ideas q me dieron, la opcion q utilice es crear un archivo
de texto y en el hago el intercambio de los datos y me funciona, solamente
q para saber si ha cambiado el archivo le he colocado un timer para estar
revisando si ha cambiado el archivo.



Hay una opción mejor: en lugar de un Timer para estar mirando todo el
rato si cambia el archivo, se puede usar un FileSystemWatcher (en
System.IO), que te dispara un evento automáticamente en cuanto cambia el
archivo.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida