2014-02-17 47 views
5

我有一個針對.NET 2.0的WinForms應用程序。我們有一個報告稱我們的某個按鈕不起作用,它所做的只是在其默認瀏覽器中打開一個網頁。通過查看日誌,我可以看到Process.Start()失敗,因爲它無法找到該文件。問題是我們將一個字符串url傳遞給Start()方法,所以我不明白爲什麼它會生成此消息。Process.Start(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

在Windows 8/Chrome上打開的[Process.Start(url)可能重複 - 是否有其他選擇?](http://stackoverflow.com/q/12206368/580951)。 – Romoku

+0

您確定'http:// www.example.com'被傳入客戶端機器而不是'www.example.com'嗎?也許你可以在一個try-catch塊中添加日誌記錄代碼,記錄所嘗試的URL。 –

回答

7

明確地嘗試使用explorer.exe作爲fileName

正如Process.Start(url) broken on Windows 8/Chrome - are there alternatives?

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

似乎intresting ... –

+0

我只是試圖在XP中安裝Firefox和Chrome,並將其設置爲默認值。在這兩次我都無法重現這個問題。我將添加此更改並讓客戶嘗試。謝謝你的幫助。 –

+0

仍然沒有運氣。我相信[Ahmed ilyay的評論](http://stackoverflow.com/questions/21835891/process-starturl-fails#comment33051080_21835891)是正確的,他們的機器有問題。標記你的答案是正確的,因爲我相信這是它應該完成的方式。謝謝各位的幫助。 –

2

您可以使用InternetExplorer與Windows操作系統一起打開URL

試試這個:

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

我們將其保留,以便在用戶的[默認瀏覽器](http://stackoverflow.com/a/10503920/1229237)中啓動, 。另外,我們不能保證IE會被安裝。我不太可能承認,但仍然如此。謝謝你的幫助。 –

+0

是的,我同意。你是否通過在默認瀏覽器中手動插入它來嘗試相同的URL? –

+0

該URL按預期工作。當它在他們的機器上使用'Process.Start()'啓動時,我們有錯誤。我相信這是與他們的機器有關,但不知道是什麼... –

0

我有這樣的代碼在Windows窗體應用程序,它工作正常:

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,這是更可能機器的具體問題。