none
使用Process打開Chrome,如何等Chrome關閉再執行後續程式呢? RRS feed

  • 問題

  • 各位先進們好

    公司習慣用用Chrome瀏覽器,所以我在程式內使用Process打開Chrome瀏覽器

    如果沒安裝Chrome就打開另一個Form,使用元件是IE為核心的WebBrowser

    想等瀏覽器關閉再繼續往下執行

    參考網上的資料  [C#] 等待啟動的處理序執行完畢   使用下列程式碼

    Try
                Dim P As Process
                P = Process.Start("C:\Users\" & System.Environment.UserName & "\AppData\Local\Google\Chrome\Application\chrome.exe",
                                  "http://www.shallin.com.tw/admin")
                P.WaitForInputIdle()
                P.WaitForExit()
    Catch ex As Exception
                IE_Form.ShowDialog()
    End Try

    但程式還是會直接往下執行,不會等Chrome瀏覽器關閉

    請教先進們我應該怎麼處理呢?

    *****電腦作業環境*****
    開發工具:Visual Studio 2010 Pro SP1
    .NET版本:4.0
    開發類型:Windows Form
    作業系統:Win 7 pro 32 bit SP1
    資料庫:MS SQL 2008 R2

    2014年11月7日 上午 09:09

解答

所有回覆

  • 檢查你正在顯示的 Chrome 的 PID 與 P.Id 是否一致。

    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年11月7日 下午 01:55
  • 你好,你可以試試這樣,不過當你關了 chrome 之後,要等幾秒鐘,電腦還在終止 chrome.exe...可能沒那快。

    要補上 PID 判斷,否則當開啟了多個 chrome.exe ...無效。

    Process p = Process.Start(""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"","http://www.shallin.com.tw/admin");
                p.WaitForInputIdle();
                p.WaitForExit();
               
               if (p.HasExited)
               {
                   //Continue...
               }


    • 已編輯 weipxf 2014年11月8日 上午 05:16
    2014年11月8日 上午 05:13
  • 謝謝兩位先進的指導

    我稍微測試了一下

    Dim P As Process
    P = Process.Start("C:\Users\" & System.Environment.UserName & "\AppData\Local\Google\Chrome\Application\chrome.exe",
                                  "http://www.shallin.com.tw/admin")
    P.WaitForInputIdle()
    P.WaitForExit()
    
    If P.HasExited = True Then
        MsgBox("已關閉Chrome")
    End If

    若使用者沒開啟Chrome,程式會等Chrome關閉再執行If判斷式,顯示MsgBox

    若使用者已事先開啟一個或多個Chrome頁面,程式建立Process開啟Chrome卻在工作管理員找不到P.ID

    判定P.HasExited = True

    是不是因為Process把控制權交給已開啟的Chrome然後消滅自己呢?

    2014年11月10日 上午 02:28
  • Process.GetProcessesByName 方法 (String)

    http://msdn.microsoft.com/zh-tw/library/z3w4xdc9(v=vs.110).aspx

    Process.CloseMainWindow 方法

    http://msdn.microsoft.com/zh-tw/library/system.diagnostics.process.closemainwindow(v=vs.110).aspx

    先判斷Chrome開啟了嗎?若開啟,先把全部關閉,再進行您程式的流程...

    2014年11月10日 上午 02:42
  • Chrome的擴充功能都是以Chrome.exe的身份

    若使用者沒開啟Chrome,程式執行後可以用For Each去尋覽Chrome的PID,然後比對

    但強迫使用者關閉Chrome似乎不太理想

    如果真的沒辦法,我就統一用IE_Form視窗的WebBrower去執行
    • 已編輯 GISK 2014年11月10日 上午 03:00
    2014年11月10日 上午 02:59
    • 已標示為解答 GISK 2014年11月11日 上午 09:05
    2014年11月11日 上午 08:03
  • 非常謝謝tihs先進的文章,問題成功解決

    若Chrome已事先開啟,會存在一個Mother Process

    而程式嘗試開啟新的頁面時會被Mother Process接管,程式開啟的Chrome被Mother Process接管而消滅

    多加一行參數讓Chrome開啟新的Mother Process,就可以避開這個問題

    新的Mother Process會是預設配置,沒有任何書籤與擴充功能

    P = Process.Start("C:\Users\" & System.Environment.UserName & "\AppData\Local\Google\Chrome\Application\chrome.exe",
                      "http://www.shallin.com.tw/admin --user-data-dir=""%temp%/New_Chrome""")


    2014年11月11日 上午 09:15