Al lanzar un proceso no hace caso al codigo???

04/09/2006 - 18:59 por aydai | Informe spam
Hola a todos, vereis, tengo el siguiente codigo:

'INSTALAMOS EL SERVIDOR DE BASES DE DATOS

label1.Text = "Instalando servidor de bases de datos"

Dim proceso As New System.Diagnostics.Process

With proceso

.StartInfo.FileName = G_DirDatos & "\setup.exe"

.StartInfo.Arguments = " /qn ADDLOCAL=ALL INSTANCENAME=AYDAI2
SECURITYMODE=SQL SAPWD=honduras29 SQLAUTOSTART=1 DISABLENETWORKPROTOCOLS=0"

.Start()

End With

'COMPROBAMOS QUE ESTA INSTALADO

While Conectado = False

If label1.Text.Length < 80 Then

label1.Text = label1.Text & "."

Else

label1.Text = "Instalando servidor de bases de datos"

End If

Me.Refresh()

Conectado = True

Try

Conex = New SqlConnection(G_Conexion)

Conex.Open()

Catch

Conectado = False

Conex = Nothing

End Try

End While

MsgBox("BASE DE DATOS INSTALADA", MsgBoxStyle.Information, "PASO 2")



El problema que tengo, es que no me hace caso al bucle que hay para
actualizar el valor del label1.text, parece que cuando lanzo el proceso que
lo que hace es instalar un servidor de SQL, se bloquea y no se me actualiza,
alguna idea?? Gracias desde ya.
 

Leer las respuestas

#1 Jesús López
05/09/2006 - 14:52 | Informe spam
Lo que lo deja colgado es el propio bucle con su intento de conexión, no el
proceso de instalación. La solución rápida, fácil y chapucera es incluir
Application.DoEvents justo antes del intento de conexión, así la label se
actualizará, pero el interfaz de usuario aparecerá igualmente congelado ya
que el intento de conexión bloquea la ejecución y tarda unos cuantos segundos
hasta que lanza la excepción.

Una solución mejor sería lanzar el proceso de instalación y en vez de
intentar una conexión constantemente en un bucle, responder al evento
Process.Exited, para ello tienes que establecer la propiedad
Process.EnableRaisingEvents a true y suscribirte al evento mediante
AddHandler. De esta manera no se congelará en absoluto el interfaz de
usuario. En el procedimiento de evento Process_Exited, deberías comprobar que
la instalación ha tenido éxito, para ello deberías comprobar el valor
Process.ExitCode que devuelve el programa de instalación. Estos códigos de
salida están documentados, son los mismos que devuelve msiexec.

Una vez comprobado que el proceso de instalación ha tenido éxito, hay que
arrancar el servicio de SQL Server, ya que aunque hayas especificado que
arranque automáticamente esto no ocurrirá hasta que no se reinicie el PC.
Para arrancar el servicio puedes usar la clase ServiceController.



Saludos:

Jesús López



"" escribió:

Hola a todos, vereis, tengo el siguiente codigo:

'INSTALAMOS EL SERVIDOR DE BASES DE DATOS

label1.Text = "Instalando servidor de bases de datos"

Dim proceso As New System.Diagnostics.Process

With proceso

..StartInfo.FileName = G_DirDatos & "\setup.exe"

..StartInfo.Arguments = " /qn ADDLOCAL=ALL INSTANCENAME=AYDAI2
SECURITYMODE=SQL SAPWD=honduras29 SQLAUTOSTART=1 DISABLENETWORKPROTOCOLS=0"

..Start()

End With

'COMPROBAMOS QUE ESTA INSTALADO

While Conectado = False

If label1.Text.Length < 80 Then

label1.Text = label1.Text & "."

Else

label1.Text = "Instalando servidor de bases de datos"

End If

Me.Refresh()

Conectado = True

Try

Conex = New SqlConnection(G_Conexion)

Conex.Open()

Catch

Conectado = False

Conex = Nothing

End Try

End While

MsgBox("BASE DE DATOS INSTALADA", MsgBoxStyle.Information, "PASO 2")



El problema que tengo, es que no me hace caso al bucle que hay para
actualizar el valor del label1.text, parece que cuando lanzo el proceso que
lo que hace es instalar un servidor de SQL, se bloquea y no se me actualiza,
alguna idea?? Gracias desde ya.



Preguntas similares