内容简介:在注册表“Software\Microsoft\Windows\CurrentVersion\App Paths”路径下的项,以exe结尾的,都可以 start xxx 运行。谷歌浏览器安装后 会在 注册表的“Software\Microsoft\Windows\CurrentVersion\App Paths\”路径下新增一个 chrome.exe的项,因为有了此项,我们就可在cmd窗口中运行start chrome 开打开谷歌浏览器了。
问题
- 目的:调用谷歌浏览器,打开指定的网页
- 问题:用户系统没有安装chrome,会弹框报错,这样体验非常不好,如果没有安装chrome,就应该使用ie浏览器打开指定的网页
调用chrome浏览器的代码
err := exec.Command("cmd", "/c","start chrome http://www.baidu.com").Run()
解决方案
- 方案一:
看看有没有什么办法,能做到下面两点,
1.1 如果用户安装了谷歌浏览器就可以打开谷歌浏览器.
1.2 如果用户没有安装谷歌浏览器,不会弹框报错,而是返回错误信息。
目前没有找可行方案。。。 - 方案二:
在执行代码前先判断系统是否安装谷歌浏览器。黄金不负苦心人,找到了方案,通过检测注册表的方式来判断 传送门
执行
-
方案二的逻辑是:
1.1 原因
谷歌浏览器安装后都会 windows系统中注册表 “HKEY_CURRENT_USER”或“HKEY_LOCAL_MACHINE”目录下新增Software\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe项
1.2 如何做呢?
我们去到注册表里面检查下看上面说的注册表的信息是否存在 ,如果存在就是安装了谷歌浏览器,没有就没有安装。
-
实现方案二的逻辑,代码如下
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 }
猜想
- 猜想
我们打开浏览器的代码,就相当于打开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 项,默认值赋值为“123.txt”的路径,如图
image.png
然后,我们打开cmd 敲入 “start a” 发现打开了123.txt文本,由此验证了我们的想法
在注册表“Software\Microsoft\Windows\CurrentVersion\App Paths”路径下的项,以exe结尾的,都可以 start xxx 运行。
总结
谷歌浏览器安装后 会在 注册表的“Software\Microsoft\Windows\CurrentVersion\App Paths\”路径下新增一个 chrome.exe的项,因为有了此项,我们就可在cmd窗口中运行start chrome 开打开谷歌浏览器了。
感谢社区
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Android检测GPS服务和定位权限是否开启
- [Winform]检测exe是否已经运行,并将其置顶
- 检测设备是否为 iPhone X/XS/XR 的几种方式
- CNN 究竟“看”到了什么?曲线检测器是否为可解释性带来了出路?
- 是否,是否,总是富肥穷瘦?
- 容器是否取代了虚拟机,这四大理由是否打动你?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Linux/Unix设计思想
甘卡兹 / 漆犇 / 人民邮电出版社 / 2012-3-28 / 39.00元
《Linux\Unix设计思想/图灵程序设计丛书》内容简介:将Linux的开发方式与Unix的原理有效地结合起来,总结出Linux与Unix软件开发中的设计原则。《Linux\Unix设计思想/图灵程序设计丛书》前8章分别介绍了Linux与Unix中9条基本的哲学准则和10条次要准则。第9章和第10章将Unix系统的设计思想与其他系统的设计思想进行了对比。最后介绍了Unix哲学准则在其他领域中的应......一起来看看 《Linux/Unix设计思想》 这本书的介绍吧!