Lanzar un proceso oculto en .net

04/05/2007 - 10:38 por Baixench | Informe spam
Hola compañeros,

Tengo una función que se encarga de lanzar un proceso el cual crea paquetes
.rar de imágenes que posteriormente se envian por ftp mediante un servicio de
windows.

El tema está en que la función que lanza el winrar se utliza en un proyecto
de formularios y cuando se lanza el proceso salta la pantalla del winrar.

Hay alguna posibilidad que pueda hacer los .rar sin que el usuario vea la
pantalla del winrar?

mi funcion es asi(ya de paso que la reaprobeche alguien):

Public Function CreaRAR(ByVal rutaRar As String, ByVal rutaOrigen As
String, ByVal rutaDestino As String, Optional ByVal parametros As String =
"a") As Boolean
Dim TimerExec As Integer
Dim TIMERCONSULTA As Integer = 30000
Try
If rutaRar = "" Then
msgError = CLASE & ".CreaRAR (La ruta del programa WinRar
está vacía)"
Return False
End If
' Manda el fichero.
Dim proc As Process = Process.Start(rutaRar, parametros & " " &
rutaDestino & " " & rutaOrigen)
Do Until proc.WaitForExit(TIMERCONSULTA)
TimerExec = TimerExec + TIMERCONSULTA
If TimerExec >= TIMERFIN Then
proc.Kill()
msgError = CLASE & ".CreaRAR (Terminó el tiempo de
espera.)"
Return False
End If
Loop
proc.Close()
Return True
Catch
msgError = CLASE & ".CreaRAR (Err:" & Err.Number & "-" &
Err.Description & ")"
Return False
End Try
end function

Gracias,

Preguntas similare

Leer las respuestas

#1 Jose Escrich
07/05/2007 - 16:01 | Informe spam
Lo que estas intentando hacer, esta corriendo por lo pronto en la UI Thread
con la aplicación del usuario va a esperar a que termine el proceso, así que
quizas convenga que crees un Thread aparte y lo lances allí.

No obstante aqui tienes un ejemplo de como configurar el process :

ProcessStartInfo processInfo = new ProcessStartInfo("regedit");

processInfo.Arguments = String.Format("/s \"{0}\"", tempFile);
processInfo.WorkingDirectory =
AppDomain.CurrentDomain.BaseDirectory;
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardInput = true;
processInfo.RedirectStandardOutput = true;
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
processInfo.WindowStyle = ProcessWindowStyle.Normal;

Process regeditProcess = Process.Start(processInfo);
regeditProcess.WaitForExit();

fijate que en la configuración tiene una serie de properties para configurar
UseShellExecute y WindowStyle. Respecto a esperar la salida del proceso,
puede utilizar el WaitForExit() para evitar crear ese while, que tienes
alli.

saludos!

José Escrich
http://latincoder.com



"Baixench" wrote in message
news:

Hola compañeros,

Tengo una función que se encarga de lanzar un proceso el cual crea
paquetes
.rar de imágenes que posteriormente se envian por ftp mediante un servicio
de
windows.

El tema está en que la función que lanza el winrar se utliza en un
proyecto
de formularios y cuando se lanza el proceso salta la pantalla del winrar.

Hay alguna posibilidad que pueda hacer los .rar sin que el usuario vea la
pantalla del winrar?

mi funcion es asi(ya de paso que la reaprobeche alguien):

Public Function CreaRAR(ByVal rutaRar As String, ByVal rutaOrigen As
String, ByVal rutaDestino As String, Optional ByVal parametros As String > "a") As Boolean
Dim TimerExec As Integer
Dim TIMERCONSULTA As Integer = 30000
Try
If rutaRar = "" Then
msgError = CLASE & ".CreaRAR (La ruta del programa WinRar
está vacía)"
Return False
End If
' Manda el fichero.
Dim proc As Process = Process.Start(rutaRar, parametros & " " &
rutaDestino & " " & rutaOrigen)
Do Until proc.WaitForExit(TIMERCONSULTA)
TimerExec = TimerExec + TIMERCONSULTA
If TimerExec >= TIMERFIN Then
proc.Kill()
msgError = CLASE & ".CreaRAR (Terminó el tiempo de
espera.)"
Return False
End If
Loop
proc.Close()
Return True
Catch
msgError = CLASE & ".CreaRAR (Err:" & Err.Number & "-" &
Err.Description & ")"
Return False
End Try
end function

Gracias,

Respuesta Responder a este mensaje
#2 Baixench
07/05/2007 - 16:18 | Informe spam
Gracias Jose,

Voy a informarme de como crear un subproceso, me parece la opción más
elegante.

Un saludo y gracias nuevamente.

"Jose Escrich" wrote:

Lo que estas intentando hacer, esta corriendo por lo pronto en la UI Thread
con la aplicación del usuario va a esperar a que termine el proceso, así que
quizas convenga que crees un Thread aparte y lo lances allí.

No obstante aqui tienes un ejemplo de como configurar el process :

ProcessStartInfo processInfo = new ProcessStartInfo("regedit");

processInfo.Arguments = String.Format("/s \"{0}\"", tempFile);
processInfo.WorkingDirectory =
AppDomain.CurrentDomain.BaseDirectory;
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardInput = true;
processInfo.RedirectStandardOutput = true;
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
processInfo.WindowStyle = ProcessWindowStyle.Normal;

Process regeditProcess = Process.Start(processInfo);
regeditProcess.WaitForExit();

fijate que en la configuración tiene una serie de properties para configurar
UseShellExecute y WindowStyle. Respecto a esperar la salida del proceso,
puede utilizar el WaitForExit() para evitar crear ese while, que tienes
alli.

saludos!

José Escrich
http://latincoder.com



"Baixench" wrote in message
news:
>
> Hola compañeros,
>
> Tengo una función que se encarga de lanzar un proceso el cual crea
> paquetes
> .rar de imágenes que posteriormente se envian por ftp mediante un servicio
> de
> windows.
>
> El tema está en que la función que lanza el winrar se utliza en un
> proyecto
> de formularios y cuando se lanza el proceso salta la pantalla del winrar.
>
> Hay alguna posibilidad que pueda hacer los .rar sin que el usuario vea la
> pantalla del winrar?
>
> mi funcion es asi(ya de paso que la reaprobeche alguien):
>
> Public Function CreaRAR(ByVal rutaRar As String, ByVal rutaOrigen As
> String, ByVal rutaDestino As String, Optional ByVal parametros As String > > "a") As Boolean
> Dim TimerExec As Integer
> Dim TIMERCONSULTA As Integer = 30000
> Try
> If rutaRar = "" Then
> msgError = CLASE & ".CreaRAR (La ruta del programa WinRar
> está vacía)"
> Return False
> End If
> ' Manda el fichero.
> Dim proc As Process = Process.Start(rutaRar, parametros & " " &
> rutaDestino & " " & rutaOrigen)
> Do Until proc.WaitForExit(TIMERCONSULTA)
> TimerExec = TimerExec + TIMERCONSULTA
> If TimerExec >= TIMERFIN Then
> proc.Kill()
> msgError = CLASE & ".CreaRAR (Terminó el tiempo de
> espera.)"
> Return False
> End If
> Loop
> proc.Close()
> Return True
> Catch
> msgError = CLASE & ".CreaRAR (Err:" & Err.Number & "-" &
> Err.Description & ")"
> Return False
> End Try
> end function
>
> Gracias,
>

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida