2016-03-04 2 views
2

Я создал приложение winform. Когда я запускаю приложение в visual studio, следующий код работает, чтобы открыть ссылку от DataGridView.Открыть ссылку в браузере с кода, позади установленного приложения C#

System.Diagnostics.Process.Start("chrome.exe", 
grdRelLinks.Rows[e.RowIndex].Cells[2].Value.ToString()); 

Но когда я устанавливаю сборку и пытаюсь сделать то же самое, ничего не происходит. Есть ли другие настройки, которые мне нужно сделать.

Пожалуйста, помогите.

+0

Знаете ли вы, где можно найти 'chrome.exe' после его установки? и имеет ли ваше приложение необходимые разрешения для запуска 'chrome.exe'? –

+0

Вы можете передать адрес ссылки на 'System.Diagnostincs.Process.Start', чтобы открыть адрес, используя браузер по умолчанию. –

+0

@SamerTufail: Ну, я новичок в winforms, и я не знаю, что вы предлагаете. Можете ли вы проконсультироваться? – user2998990

ответ

4

Если вы хотите открыть ссылку ссылку с вашего DataGridView, вы должны фактически передать URL не веб-браузер, то есть .:

System.Diagnostics.Process.Start(grdRelLinks.Rows[e.RowIndex].Cells[2].Value.ToString()); 

Это будет в конечном итоге пытается открыть данную URL с браузером по умолчанию для операционной системы. Ofc убедитесь, что ссылка url из url правильно отформатирована.

Если chrome.exe не работает для запуска, возможно, попробуйте сократить срок его действия: chrome? Вы также можете подтвердить, что Win+R (a.k.a. Run...), а затем chrome.exe фактически открывается Хром? Если нет, можете ли вы проверить, есть ли HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe?

Если да, возможно, неправильное форматирование URL-адреса?

+0

Но я не знаю, какая это ссылка. grdRelLinks.Rows [e.RowIndex] .Cells [2] .Value.ToString() эта строка дает мне url – user2998990

+0

Я вижу. Тогда я отредактировал свой ответ. – mwilczynski

+1

Стоит убедиться, что ссылки начинаются с 'http' или' https'. Другим способом это не удастся. – pwas

0

Вы можете открыть URL в браузере со следующими отрывками:

Process process = new Process(); 
process.StartInfo.UseShellExecute = true; 
process.StartInfo.FileName = "http://google.com"; 
process.Start(); 

или

System.Diagnostics.Process.Start("http://google.com"); 

В вашем примере, чтобы позволить пользователям запускать его из DataGridView, вы должны просто определить щелкните событие, подобное этому:

private void grdRelLinks_CellContentClick(object pSender, DataGridViewCellEventArgs pArgs) 
{ 
    if (pArgs.RowIndex > -1 && pArgs.ColumnIndex == 2) 
    { 
     string url = grdRelLinks.Rows[pArgs.RowIndex].Cells[pArgs.ColumnIndex].Value.ToString(); 

     if(!string.IsNullOrWhiteSpace(url)) 
      System.Diagnostics.Process.Start(url); 
    } 
} 
+0

Это именно то, что я делаю, его не работает – user2998990

+0

@ user2998990 Что произойдет, если вы поместите URL-адрес в функцию запуска Windows (Windows + R)? Запускает ли это приложение для вас? – Oceans

+0

Я сделал быстрый google, чтобы узнать, что может быть причиной вашей проблемы, и наткнулся на следующий ответ: http://stackoverflow.com/a/10504367/4579864 – Oceans

0

Это сработало для меня.

private void OnGridViewContentClick(object sender, EventArgs e) 
    { 
     string chromeExePath = CheckIfChromeIsInstalled(); 
     if (!string.IsNullOrEmpty(chromeExePath)) 
     { 
      MessageBox.Show("Yayy Chrome.exe was found !"); 
      //Path is not null: 
      Process.Start(chromeExePath, "http://www.google.de");//Here you can also enter the URL you get from your GridView 
      string url = grdRelLinks.Rows[e.RowIndex].Cells[2].Value.ToString(); 
      if(!url.StartsWith("http") 
      { 
       url = $"http://{url}"; 
      } 
      Process.Start(chromeExePath, url); 
     } 
     else 
     { 
      MessageBox.Show("Chrome.exe not found"); 
     } 
    } 

    private string CheckIfChromeIsInstalled() 
    { 
     DirectoryInfo programFiles = new DirectoryInfo(Environment.GetEnvironmentVariable("PROGRAMFILES"));//Find your Programs folder 
     DirectoryInfo[] dirs = programFiles.GetDirectories(); 
     List<FileInfo> files = new List<FileInfo>(); 
     Parallel.ForEach(dirs, (dir) => 
     { 
      files.AddRange(dir.GetFiles("chrome.exe", SearchOption.AllDirectories)); //Search for Chrome.exe 
     }); 
     //files should only contain 1 entry 
     //Return path of chrom.exe or null 
     return (files.Count > 0) ? files[0].FullName : null; 
    } 

ПРИМЕЧАНИЕ: Начиная с этой дополнительной Thread может быть полезно!

EDIT: Можете ли вы проверить, если cmd.exe работает с начала chrome.exe "your URL"?!

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