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 ]
- Establece la aplicación o el documento que se va a iniciar
- Debe establecer al menos la FileName propiedad antes de iniciar el proceso.
- El nombre de archivo es cualquier aplicación o documento.
- Un documento se define como cualquier tipo de archivo que tenga asociada una acción abierta o predeterminada. Es decir, que la extensión este asociada a un programa
[Arguments]
OJO, NO USAR Esta instrucción provoca un error de fichero no encontrado
System.Diagnostics.Process.StartInfo.Arguments = "www.northwindtraders.com"
[UseShellExecute]
- Indica si se va a usar el shell del sistema operativo para iniciar el proceso.
- El conjunto de tipos de archivo disponibles depende en parte del valor de la propiedad UseShellExecute.
- Si toma el valor [True], puede iniciar cualquier documento y realizar operaciones en el archivo, como imprimir, con el Process componente.
- Cuando toma el valor [False], solo puede iniciar ejecutables con el componente Process.
[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