[Infraestructura - Net 7.0 -] - Process.Start

Descripción general:

Con la actualización de Net 7.0 algunas instrucciones no funcionan como lo hacían antes de la actualización, una de ellas es [Process.Start]. En este documento se analizan las posibles soluciones


He empezado a trabajar con Net.7.0 y he tenido problemas con alguna clase “vieja” que usaba [Process.Start] para lanzar una Url. Por ejemplo: En Net 7.0 No funciona una instrucción del tipo:

Process.Start("https://www.youtube.com/watch?v = P5tW-_TeC9c")

A pesar de que la documentación de Microsoft sigue mostrando es sus ejemplos que si que funciona

Después de mirar muchas web, al final he encontrado el problema, que consiste en que Microsoft ha cambiado el comportamiento de [Process.Start] . Parece ser que el objetivo es que se comporte igual en Net.7.0 y en Net.Core. Y también he dado con la solución, que consiste en usar la propiedad [UseShellExecute = True] y en usar la propiedad [FileName] en lugar de la propiedad [Arguments]


↑↑↑

Solución Usando [System.Diagnostics.Process]

El código básico es el siguiente:

        Using proceso As New System.Diagnostics.Process
            With proceso
                ' NO USAR - DA PROBLEMAS
                '.StartInfo.Arguments = "www.northwindtraders.com"
        
                .StartInfo.FileName = "http://www.microsoft.es"
                .StartInfo.UseShellExecute = True   ' OJO debe ser [True]
                .StartInfo.CreateNoWindow = True
                .Start()
            End With
        End Using

A modo de pequeña descripción

[Process]

Proporciona acceso a procesos locales y remotos, y permite iniciar y detener procesos del sistema local.

[FileName ]

[Arguments]

OJO, NO USAR Esta instrucción provoca un error de fichero no encontrado

System.Diagnostics.Process.StartInfo.Arguments = "www.northwindtraders.com"

[UseShellExecute]

[CreateNoWindow]

Indica si el proceso se va a iniciar en una nueva ventana o no.


↑↑↑

Solución Alternativa usando [Wscript.Shell]

El código básico es el siguiente:

   '----------------------------------------------
   ' NOTA IMPORTANTE
   ' [IWshShell_Class] y [IWshShortcut_Class]
   ' Requieren la referencia
   ' Windows Script Host Object Model
   '----------------------------------------------
   Dim oShell As IWshRuntimeLibrary.IWshShell_Class = Nothing
   Dim oShortcut As IWshRuntimeLibrary.IWshShortcut_Class = Nothing
   Try
       oShell = CType(CreateObject("WScript.Shell"), IWshRuntimeLibrary.IWshShell_Class)
      
       'oShell.Run("http://joaquin.medina.name")
       'oShell.Run(localDireccion)
       Dim localUrl As New System.Uri(localDireccion)
       oShell.Run(localUrl.AbsoluteUri)
   Catch ex As system.Exception
       ' No hacer nada
       ' No funciona y no se lanza el recurso
   End Try

↑↑↑

Mis clases

Código VB.Net - Enlaces de descarga