2014-03-07 94 views
0

我有一個字符串,它是一個數據URI。例如在默認瀏覽器中從c#打開數據URI

string dataURI = data:text/html,<html><p>This is a test</p></html> 

然後我用

System.Diagnostics.Process.Start(dataURI) 

調用Web瀏覽器,但在Web瀏覽器不開,我剛剛得到一個錯誤。當我將我的數據URI粘貼到瀏覽器地址欄中時,它會很好地打開頁面。

任何人都可以請幫助我,告訴我我做錯了什麼?

謝謝你,託尼

+0

你會得到什麼錯誤? – Junaith

+0

這是德文:( 我翻譯了類似以下內容:運行失敗。目標導致異常。 – tomet

回答

2

按本article

的ShellExecute分析傳遞給它,這樣的ShellExecute可以提取無論是協議說明符或擴展的字符串。接下來,ShellExecute會在註冊表中查找,然後使用協議說明符或擴展名來確定要啓動的應用程序。如果將http://www.microsoft.com傳遞給ShellExecute,則ShellExecute將http://子字符串識別爲協議。

在你的情況下,沒有http子。因此,您必須顯式傳遞默認瀏覽器可執行文件作爲文件名和數據URI作爲參數。我使用了articleGetBrowserPath代碼。

string dataURI = "data:text/html,<html><p>This is a test</p></html>"; 
string browser = GetBrowserPath(); 
if(string.IsNullOrEmpty(browser)) 
    browser = "iexplore.exe"; 
System.Diagnostics.Process p = new Process(); 
p.StartInfo.FileName = browser; 
p.StartInfo.Arguments = dataURI; 
p.Start(); 

private string GetBrowserPath() 
{ 
    string browser = string.Empty; 
    Microsoft.Win32.RegistryKey key = null; 
    try 
    { 
     // try location of default browser path in XP 
     key = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(@"HTTP\shell\open\command", false); 
     // try location of default browser path in Vista 
     if (key == null) 
     { 
      key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http", false); ; 
     } 
     if (key != null) 
     { 
      //trim off quotes 
      browser = key.GetValue(null).ToString().ToLower().Replace("\"", ""); 
      if (!browser.EndsWith("exe")) 
      { 
       //get rid of everything after the ".exe" 
       browser = browser.Substring(0, browser.LastIndexOf(".exe") + 4); 
      }      
     } 
    } 
    finally 
    { 
     if (key != null) key.Close(); 
    } 
    return browser; 
} 
+0

我試過了你的方法,但是它不起作用。它正確調用了瀏覽器,但只傳遞了部分URI。 無論如何,現在我創建了一個臨時文件,並讓瀏覽器顯示,而不是數據URI,完美地工作。但我感謝您的幫助,它讓我明白了這個問題。 – tomet

相關問題