問題
- 目的:調(diào)用谷歌瀏覽器读处,打開指定的網(wǎng)頁
- 問題:用戶系統(tǒng)沒有安裝chrome糊治,會彈框報錯,這樣體驗非常不好罚舱,如果沒有安裝chrome井辜,就應(yīng)該使用ie瀏覽器打開指定的網(wǎng)頁
調(diào)用chrome瀏覽器的代碼
err := exec.Command("cmd", "/c","start chrome http://www.baidu.com").Run()
解決方案
- 方案一:
看看有沒有什么辦法,能做到下面兩點管闷,
1.1 如果用戶安裝了谷歌瀏覽器就可以打開谷歌瀏覽器.
1.2 如果用戶沒有安裝谷歌瀏覽器粥脚,不會彈框報錯,而是返回錯誤信息包个。
目前沒有找可行方案刷允。。碧囊。 - 方案二:
在執(zhí)行代碼前先判斷系統(tǒng)是否安裝谷歌瀏覽器恃锉。黃金不負(fù)苦心人,找到了方案呕臂,通過檢測注冊表的方式來判斷 傳送門
執(zhí)行
方案二的邏輯是:
1.1 原因
谷歌瀏覽器安裝后都會 windows系統(tǒng)中注冊表 “HKEY_CURRENT_USER”或“HKEY_LOCAL_MACHINE”目錄下新增Software\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe項
1.2 如何做呢破托?
我們?nèi)サ阶员砝锩鏅z查下看上面說的注冊表的信息是否存在 ,如果存在就是安裝了谷歌瀏覽器歧蒋,沒有就沒有安裝土砂。實現(xiàn)方案二的邏輯州既,代碼如下
func CheckChrome() (string, bool) {
regpath := "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\chrome.exe"
checkKey := func(k *registry.Key) (string, bool) {
s, _, err := k.GetStringValue("")
if err != nil {
return "", false
}
return s, true
}
chs := make(chan registry.Key, 2)
queryKey := func(w *sync.WaitGroup, k registry.Key) {
defer w.Done()
key1, err := registry.OpenKey(k, regpath, registry.ALL_ACCESS)
if err == nil {
chs <- key1
}
}
waitGroup := new(sync.WaitGroup)
waitGroup.Add(2)
go queryKey(waitGroup, registry.CURRENT_USER)
go queryKey(waitGroup, registry.LOCAL_MACHINE)
waitGroup.Wait()
close(chs)
for k := range chs {
return checkKey(&k)
}
return "", false
}
猜想
- 猜想
我們打開瀏覽器的代碼,就相當(dāng)于打開cmd萝映,在cmd中敲入“start chrome 地址”吴叶,打開谷歌谷歌瀏覽器⌒虮郏“start chrome ...”中的chrome蚌卤,在注冊表 “Software\Microsoft\Windows\CurrentVersion\App Paths\” 路徑下,有個chrome項奥秆。因此猜想在注冊表 “Software\Microsoft\Windows\CurrentVersion\App Paths” 路徑下的項逊彭,都可以start XXX 運行。 -
測試猜想
我們在桌面新增一個“123.txt”文本构订,然后在“Software\Microsoft\Windows\CurrentVersion\App Paths\” 路徑下新增a.exe 項侮叮,默認(rèn)值賦值為“123.txt”的路徑,如圖
然后悼瘾,我們打開cmd 敲入 “start a” 發(fā)現(xiàn)打開了123.txt文本囊榜,由此驗證了我們的想法
在注冊表“Software\Microsoft\Windows\CurrentVersion\App Paths”路徑下的項,以exe結(jié)尾的亥宿,都可以 start xxx 運行卸勺。
總結(jié)
谷歌瀏覽器安裝后 會在 注冊表的“Software\Microsoft\Windows\CurrentVersion\App Paths\”路徑下新增一個 chrome.exe的項,因為有了此項烫扼,我們就可在cmd窗口中運行start chrome 開打開谷歌瀏覽器了孔庭。