2010-05-13 9 views
6

Process.Start ("IExplore.exe");Process.Start ("IExplore.exe"); <- ¿Es esto confiable?

¿Esto siempre funciona, en cada máquina? Si no, ¿cómo hacerlo correctamente?

... EDIT: .................................

El problema con el Proceso .Start ("http://www.example.com/"); es que tenemos que apuntar a un archivo html local, con alguna cadena de consulta que especifica qué página cargar en el conjunto de marcos html. Así nuestra URL tiene el siguiente aspecto:

G:\PathToHelpFolder\index.html#search?page=1.html 

Si pasa este camino a Process.Start, se genera un error: "no puede encontrar el archivo". Esto es causado por la cadena de consulta al final. (#search? page = 1.html)

Por lo tanto, tenemos que iniciar el explorador (o el navegador predeterminado sería mejor) con la ruta de archivo como un argumento de línea de comando. Encontramos el método anterior en la documentación de MSDN. (Process.Start ("IExplore.exe");) Nuestra única pregunta es si este método es lo suficientemente confiable como para implementarlo en una aplicación comercial. Mono no es un problema, solo los sistemas de Windows son el objetivo.

... EDIT: Nuestra solución ......

Nuestra solución era conseguir que el navegador por defecto del registro, y empezar que con el nombre de archivo como argumento. (Como se indica en: Launching default browser with html from file, then jump to specific anchor)

+7

diría que falla en la mayoría de los lugares que tendría que utilizar Mono :) –

+0

En un momento me quita el archivo exe IE6 para evitar programas que querían lanzar IE. Dejó la DLL para que VisStudio pudiera analizar los archivos de ayuda. – NVRAM

Respuesta

3

Esto debería funcionar en todas las máquinas que tengan un ejecutable llamado IExplore.exe en una ubicación que Process.Start puede encontrar utilizando la variable de entorno PATH.

Process.Start documentation

Inicio de un proceso por el que especifica el nombre del archivo es similar a escribir la información en el cuadro de diálogo Ejecutar del menú Inicio de Windows. Por lo tanto, el nombre del archivo no necesita representar un archivo ejecutable. Puede ser de cualquier tipo de archivo para el que se haya asociado la extensión con una aplicación instalada en el sistema. Por ejemplo, el nombre del archivo puede tener una extensión .txt si tiene archivos de texto asociados con un editor, como el Bloc de notas, o puede tener un .doc si tiene archivos asociados.doc con una herramienta de procesamiento de textos, como Microsoft Word. Del mismo modo, de la misma manera que el cuadro de diálogo Ejecutar puede aceptar un nombre de archivo ejecutable con o sin la extensión .exe, la extensión .exe es opcional en el parámetro fileName. Por ejemplo, puede establecer el parámetro fileName en "Notepad.exe" o "Bloc de notas".

Si alguien ha cambiado de nombre o eliminado IExplore.exe, o no lo tenga en un lugar que no está en la variable de entorno PATH, entonces no va a funcionar.

Sin embargo, si su objetivo es abrir un navegador, iré con la URL como otros han sugerido.

22

Si su objetivo es abrir un navegador para ir a una página específica, es mejor utilizar sólo la URL de la página:

Process.Start("http://www.example.com/"); 

De esta manera, el navegador por defecto del usuario se ser usado. (Yo, por mi parte, me molestaría que me forzaran a usar IE.)

+0

que no funcionará si apuntas a un archivo local y agregas una cadena de consulta ... también +1 para el punto de navegador predeterminado ... gracias –

+0

Esto puede fallar si alguien intenta instalar Google Chrome en un dispositivo bloqueado (corporativo) PC, después de lo cual MSIE aún funciona y es el navegador predeterminado, pero donde el registro está dañado. La solución es arreglar los contenidos del registro. –

2

También puede lanzar una url allí. (Process.Start(" http://somewebsite.com ");) que siempre funcionará y usará el navegador estándar.

2

Probablemente debería ejecutar directamente un archivo HTML para que se respete la asociación del usuario. No hay nada más molesto para mí, como usuario, que tener algún paquete me obligue a usar IE cuando tengo claramente establezco mis preferencias para usar otro navegador.

0

Se puede crear un archivo HTML simple que redirige la del enlace real se querer, luego inicie el proceso apuntando a esa URL más simple.

0

Prueba esto:

Process.Start("file:///g:/PathToHelpFolder/index.html#search?page=1.html");

+0

no funciona ... querystring se corta, incluso cuando encierra toda la cadena entre comillas ... –