2013-10-10 3 views
1

Я написал приложение Windows в C#, которое открывает веб-сайт в браузере по умолчанию в событии click. Мой браузер по умолчанию - Google Chrome. Поэтому, когда я запускаю свое приложение и нажимаю на ярлык, он не может открыть веб-сайт в Chrome. Ошибка браузера Chrome: «Не удалось создать каталог данных - Google Chrome не может читать и записывать в свой каталог данных». Я использую «System.Diagnostics.Process.Start» для запуска процесса.Google Chrome не открывается из приложения, используя Process.Start()

Интересно, когда я закрываю приложение и снова его открываю. Он успешно открывает веб-сайт в браузере Chrome по умолчанию. :)

Я попытался использовать различные параметры Process.StartInfo, но никогда не получится. Ниже приведен метод, используемый для запуска веб-сайта.

Я использую Windows 8-64Bit и .Net Framework 4. Не могли бы вы помочь мне в этом.

Test1:

public static void RunWebClient() 
{ 
    Process proc = new Process(); 

    Microsoft.Win32.RegistryKey subKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(@"http\shell\open\command"); 
    String DefaultBrowser = subKey.GetValue(null).ToString(); 

    if (DefaultBrowser != null) 
    { 
     int startIndex = DefaultBrowser.IndexOf("\"") + 1; 
     int endIndex = DefaultBrowser.IndexOf("\"", startIndex); 
     string RegDefaultBrowserPath = DefaultBrowser.Substring(startIndex, endIndex - startIndex); 

     proc.StartInfo.FileName = RegDefaultBrowserPath; 
     proc.StartInfo.Arguments = @"http://localhost/Test/"; 
     proc.StartInfo.UseShellExecute = true; 
     proc.StartInfo.LoadUserProfile = false; 
     proc.Start(); 
    } 
} 

test2:

public static void RunWebClient() 
{ 
    System.Diagnostics.Process.Start("http://localhost/Test/"); 
} 
+2

Я не уверен, что это актуально, но эта строка 'proc.StartInfo.FileName = RegDefaultBrowserPath;' не нужна при использовании 'ShellExecute'. Кроме того, установка 'LoadUserProfile' на' false' мне подозрительна. Просто запустите URL-адрес с оболочкой и оставите остальных в покое. –

+0

У вас есть такие вещи, как ОАК? – Ian

+0

Для манипуляций с пробелами используйте класс 'System.IO.Path', а не простые строковые функции. – xxbbcc

ответ

0

Я хотел бы попробовать добавить WorkingDirectory к вашему ProcessStartInfo класса

proc.StartInfo.FileName = Path.GetFileName(RegDefaultBrowserPath); 
proc.StartInfo.WorkingDirectory = Path.GetDirectoryName(RegDefaultBrowserPath); 

Passing полное имя файла в свойстве FileName является недостаточно, чтобы установить текущий рабочий каталог для запущенного файла.

+0

Спасибо за ваш ответ !! Я попробовал, но такую ​​же ошибку. Я столкнулся с этой проблемой только для Windows 8, а не для Windows 7. – Pankaj

+0

Вы пытались переместить значение Arguments в свойство FileName? Я имею в виду, вы просто пытаетесь использовать браузер по умолчанию (Chrome или еще), поэтому пусть оболочка выбирает его. Перемещение значения аргументов в свойство FileName должно запустить текущий браузер. – Steve

+0

Да, я попытался переместить аргументы в свойство FileName. Также я столкнулся с этой проблемой только с Chrome, который является моим браузером по умолчанию. – Pankaj

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