Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





¿Cómo instalo y desinstalo software con VC# 2005?

Iniciado por KronoX, 10 de Agosto de 2007, 08:18:11 PM

« anterior - próximo »

KronoX

Buenos días... perdonen tantas preguntas, es que estoy haciendo una investigación, es por esto que hago esta pregunta... necesito saber si conocen alguna forma de instalar o desintalar un software con C#, abrir el "Setup.exe" o el "Uninstall.exe" es fácil, pero mi problema es... como le doy el "Siguiente/Next" ... hasta el "Finalizar", y bueno siendo un poco mas profundos aunque no es necesario como elijo opciones como "personalizado/completo", debe haber alguna forma de emular clicks sobre aplicaciones con C#... pero no sé... si alguien sabe, agradecería mucho que me indiquen como y si no igualmente muchas gracias por prestar atención a este post.
l éxito no depende tanto del talento como de la energía y de la buena voluntad

Tei

Yo soy usuario de linux, asi que no entiendo muy bien tu pregunta, al parecer quieres hacer algo asi com apt-get install nombreprograma, pero en windows.

Si el software que te interesa esta en msi, investiga las opciones de msi que parecen muy interesantes.
En otro caso, un instalador en realidad lo que hace es copiar unos ficheros y crear unas entradas en el registro. Puedes analizar que ficheros copia y que claves del registro crea, de modo que tu "superinstalador" podria instalar ese mismo programa o cualquier otro que hubieras analizado.
Tambien creo que existen programas que pulsan por ti los botones de siguiente.

Pero me parece una opcion tan absolutamente ridicula...

[EX3]

Muchas instalaciones permiten lanzar la instalacion en modo desatentido o instalacion silenciosa. Esta es llamada a traves de linea de comando pasando unos argumentos y el resto del proceso se realiza sin mediacion del usuario y algunas veces sin interfaz visual si quiera. Investiga si dicha instalacion dispone de ese modo.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

KronoX

Muchas gracias por sus respuestas, aún no he averiguado pues acabo de leerlas pero me animan mucho, así que a investigar con lo que me han proporcionado. Muchas gracias. :)
l éxito no depende tanto del talento como de la energía y de la buena voluntad

KronoX

Ok :) aquí les va... :)

1- Esta es la forma que encontré en internet... gracias por hablarme de la instalación silenciosa y la de modo no atendido :) de no ser por esa clave pienso que no hubiese encontrado nada hasta ahora.

Process Installapp1 = new Process();
Installapp1.StartInfo = new ProcessStartInfo@"\\server\share\install.msi");
Installapp1.StartInfo.Arguments = "/qb";
Installapp1.Start();

2.- Esta es la forma en la que lo hice en mi aplicación...

Process Instalador = new Process();
Instalador.StartInfo.FileName = @"C:\Aplicacion.msi";
Instalador.StartInfo.Arguments = "/qn";
Instalador.Start();

Bueno en realidad no probé la forma que encontré en internet... jajaja y bueno sólo me faltaba esa línea:

- Instalador.StartInfo.Arguments = "/qn"

Pero... esto sólo funciona, bueno por lo menos hasta ahora con lo que he probado, con los instaladores "*.msi", que no sean tan complejos. Al parecer no funciona con los "*.exe" ya algo me habían hablado del "*.msi" ... supongo que con el tiempo dejarán de exisitir los "*.exe" para instaladores.

Gracias por todo :)
l éxito no depende tanto del talento como de la energía y de la buena voluntad

KronoX

jajajaja por cierto... si alguien sabe omo desinstalar me avisa por fa... sé que es con un comando "msiexec /x", bueno al menos así dicen en todas partes... pero nadie pone código simplemente indican ese comando... en todo caso puse "/x" en vez de "/qn"... pero nada no me salió... y como es el mismo instalador... bueno fuera si fuera un uninstall... por que no habría que indicarle nada... pero acá hay que indicarle si se quiere "desinstalar" o "reparar" y por eso no me funciona :$ me avisan por favor :) gracias... por mi parte seguiré averiguando :)
l éxito no depende tanto del talento como de la energía y de la buena voluntad

shephiroth

A ver, yo te puedo decir lo siguiente.

- Para instalar usando msiexec.exe como programa, el primer parametro es /i y el segundo la direccion al msi. Me imagino que modificando el parametro tal como lo dicen se podría poner en modo silencioso.
- Para repararel comando es /f
- Para desinstalar el comando es /x

En ambos ultimos casos, el segundo argumento es la direccion al msi, con "" si hay espacios ;)

KronoX

Entonces para instalar sería algo así?... no estoy muy seguro... y bueno ahorita no estoy en mi casa sino en mi trabajo... y no tengo el VS aca... pero a penas llegue lo pruebo...

Process Instalador = new Process();
Instalador.StartInfo.FileName = @"/x\"C:\Aplicacion.msi\"";
Instalador.Start();

P.D.: Sin argumentos ni nada ... ¿?

Muchas gracias por tu respuesta shephiroth. :D
l éxito no depende tanto del talento como de la energía y de la buena voluntad

Tei

Cita de: "KronoX"
Process Instalador = new Process();
Instalador.StartInfo.FileName = @"/x\"C:\Aplicacion.msi\"";

Investiga si la libreria de este lenguaje acepta / para separador de directorios. Porque utilizar \ es una verdadera cacofonia.

En cualquier caso seria C:\\Aplicacion, y  no C:\Aplicacion como has escrito. Creo yo.

shephiroth

Creo que te confundiste al escribirlo, pero seria algo asi:

Process Installapp1 = new Process();
Installapp1.StartInfo.FileName = "msiexec.exe";
Installapp1.StartInfo.Arguments = "/x \"archivo.msi\"";
Installapp1.Start();

Vicente

Cita de: "Tei"
Cita de: "KronoX"
Process Instalador = new Process();
Instalador.StartInfo.FileName = @"/x\"C:\Aplicacion.msi\"";

Investiga si la libreria de este lenguaje acepta / para separador de directorios. Porque utilizar \ es una verdadera cacofonia.

En cualquier caso seria C:\\Aplicacion, y  no C:\Aplicacion como has escrito. Creo yo.

Deberías usar la clase Path para los separadores (Path.DirectorySeparatorChar, Path.VolumeSeparatorChar).

Tei: no hace falta escapar \ porque está usando un verbatim string (@"loqueseaquenohacefaltaescaparloporlaarroba").

Un saludo,

Vicente

Tei

Cita de: "Vicente"no hace falta escapar \ porque está usando un verbatim string (@"loqueseaquenohacefaltaescaparloporlaarroba").

Ha... interesante. Como el qq( de perl.  Pero escapando las " con \".

KronoX

Gracias a todos ya me salió con el código que "shephiroth" mandó... .
Pero perdonen que sea tan insistente en este tema... y es que en sí estoy programando un hilo para que instale y desinstale sw (es parte de un pryecto mayor pero en fin...), por lo tanto cuando instalo SW, no pregunta nada y simplemente lo instala con el código que ya ha sido mostrado, realizando la instalación imperceptible al usuario...

No pasa así cuando desinstalo... sino que me muestra una ventana con:
- Título: "Windows Installer"
- Mensaje: "¿Está seguro que desea desinstalar este producto?"
- Botones de Sí y No

¿Cómo podría hacer para que esta ventana se omita y miexec sepa que la respuesta es sí, y que no salga ni siquiera la barra de progreso al desinstalar? (para que el usuario no se de cuenta que el hilo está trabajando)

Por ejemplo al instalar encontré estos parámetros que debía mandar para que no salga nada:

Parametros
/qn : No muestra interfaz de usuario
/qb : Muestra interfaz de usuario básica
/qr : Muestra interfaz de usuario reducida con un dialogo modal que se muestra al final de la instalación
etc...

(Por si a alguien le sirve... está en http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/msiexec.mspx?mfr=true)

Pero no encuentro un parametro que sea "/xn" por ejemplo...

Este problema también se me presenta al instalar instaladores , valga la redundancia, "*.msi" con mas preguntas... y lo que deseo es que todo lo ejecute el hilo sin que el usuario lo note.

Muchas gracias por todo.. me han ayudado bastante, perdonen que los siga molestando...
Citar
l éxito no depende tanto del talento como de la energía y de la buena voluntad

KronoX

Perdonen que los moleste tanto... es que no quería quedarme de brazos cruzados y descaradamente a ver que es lo que me dicen... ya que ya me han ayudado bastante...

Bueno según lo que he revisado.... poniendo en el Inicio->Ejecutar: msiexec

Me doy cuenta que:

- /i, /f y /x son opciones de instalación y van antes del path de mi "*.msi"
- /qn, /qb, /qr, etc.. son opciones de pantalla y van después del path de mi "*.msi"

Así que finalmente queda así... para instalar y para desinstalar...

private void instalarSoftware()
{
   Process p = new Process();
       p.StartInfo.FileName = "msiexec.exe";
       p.StartInfo.Arguments = "/i \"C:\\Aplicacion.msi\"/qn";
   p.Start();
}

private void desinstalarSoftware()
{
   Process p = new Process();
       p.StartInfo.FileName = "msiexec.exe";
       p.StartInfo.Arguments = "/x \"C:\\Aplicacion.msi\"/qn";
   p.Start();
}

Nuevamente muchas gracias por todo :)

jajaja y por cierto quien sepa para que son las demás opciones de "msiexec" de reinicio, registro, actualización y reparación... me indica por favor. Aunque mas o menos supongo para que son pero nunca estarán de mas sus consejos :)

:D ¡DIOS los bendiga! :D
l éxito no depende tanto del talento como de la energía y de la buena voluntad

KronoX

Buenas :) hice un artículo de esto en la página "www.codeproject.com"... al final incluí un link a esta página :)... muchas gracias :)
l éxito no depende tanto del talento como de la energía y de la buena voluntad






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.