2014-02-17 3 views
5

У меня есть приложение WinForms для таргетинга .NET 2.0. У нас есть отчет о том, что одна из наших кнопок не работает, все, что она делает, открывает веб-страницу в браузере по умолчанию. Просматривая журналы, я вижу, что Process.Start() терпит неудачу, потому что он не может найти файл. Проблема в том, что мы передаем строковый url в метод Start(), поэтому я не могу понять, почему он генерирует это сообщение.Ошибка Process.Start (url)

Вот исключение из журналов:

System.ComponentModel.Win32Exception: The system cannot find the file specified 
    at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) 
    at System.Diagnostics.Process.Start() 
    at System.Diagnostics.Process.Start(ProcessStartInfo startInfo) 
    at System.Diagnostics.Process.Start(String fileName) 
    at *namespace*.Website.LaunchWebsiteAsync(String url) 
The system cannot find the file specified 
    at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) 
    at System.Diagnostics.Process.Start() 
    at System.Diagnostics.Process.Start(ProcessStartInfo startInfo) 
    at System.Diagnostics.Process.Start(String fileName) 
    at *namespace*.Website.LaunchWebsiteAsync(String url) 

И для полноты картины:

Process.Start(url); 

Где URL имеет значение что-то вроде: "http://www.example.com"

После поиска в Интернете я столкнулся с this blog с той же проблемой. Разница в том, что это было характерно для Windows 8. Он обнаружил, что некоторые браузеры не регистрируются правильно при установке. С тех пор это было исправлено, поскольку браузеры выпустили обновления. (Блог вскоре после выпуска Windows 8).

Я мог понять это, если наш клиент не установил браузер. Но это не так. Я также загрузил виртуальную машину Windows XP и попытался удалить все ассоциации для типов файлов .html, URL: HyperText Transfer Protocol и т. Д. Из окна «Параметры папки» на вкладке «Типы файлов». Но я не могу воспроизвести проблему.

Есть ли у кого-нибудь идеи, почему это может закончиться ошибкой и/или как я могу воспроизвести ошибку?

В качестве примечания стороны, наш клиент работает под управлением Windows XP.

+1

вы могли бы дать нам строку URL-адрес, который вы используете? это может помочь! – Shamim

+0

Возможный дубликат [Process.Start (url), разбитый на Windows 8/Chrome - есть альтернативы?] (Http://stackoverflow.com/q/12206368/580951). – Romoku

+0

Вы уверены, что 'http: // www.example.com' передается на машине клиента, а не' www.example.com'? Возможно, вы могли бы добавить код регистрации в блок try-catch, который регистрировал URL-адрес, на который был сделан URL. –

ответ

7

Просьба использовать explorer.exe для fileName явно.

Как подробно описано в Process.Start(url) broken on Windows 8/Chrome - are there alternatives?

Process.Start("explorer.exe", url); 
+0

кажется интересным ... –

+0

Я просто попытался установить Firefox и Chrome в XP и установить его как значение по умолчанию. В обоих случаях я не мог воспроизвести проблему. Я добавлю это изменение и попрошу клиента попробовать его. Спасибо за вашу помощь. –

+0

Все еще не повезло. Я считаю, что комментарий [Ahmed ilyay's] (http://stackoverflow.com/questions/21835891/process-starturl-fails#comment33051080_21835891) верен, что в их машине есть проблема. Отметьте свой ответ так же правильно, как я считаю, так оно и должно быть сделано. Спасибо всем за помощь. –

2

Вы можете открыть URL, используя InternetExplorer, который поставляется вместе с ОС Windows.

Попробуйте:

Process.Start("IEXPLORE",url); 
+0

Мы оставили это, поэтому он будет запущен в [браузере по умолчанию] (http://stackoverflow.com/a/10503920/1229237) , Кроме того, мы не можем гарантировать, что IE будет установлен. Это вряд ли я признаю, но все же. Спасибо за вашу помощь. –

+0

да, я согласен. вы пытались использовать тот же URL-адрес, вручную включив его в своем браузере по умолчанию? –

+0

URL работает как ожидалось. Это когда он запускается с использованием 'Process.Start()' на их машине, мы имеем ошибку. Я считаю, что это как-то связано со своей машиной, но не знаю, что ... –

0

У меня есть этот код в приложения Windows Forms и она отлично работает:

var info = new ProcessStartInfo(url); 
Process.Start(info); 
+0

Глядя на стек исключения, я считаю, что если вы используете перегрузку строки, она по умолчанию соответствует указанному вами коду. Спасибо за вашу помощь. –

+0

Да, я бы так подумал. Просто надеялся, что, возможно, была разница в поведении. Конечно, теперь я замечаю, что вы говорите .NET 2.0. Этот код отлично работает в 4.5. Возможно, поэтому я не вижу никаких проблем. Или, может быть, как сказал @Dayan, может быть, это XP. –

1
try 
{ 
    Process.Start(url); 
} 
catch (Win32Exception) 
{ 
    Process.Start("IExplore.exe", url); 
} 

Специально поскольку ваше дело с XP, это более чем вероятно, машина специфическая проблема.

Смежные вопросы