exec.Command wins下 传入的执行命令有问题,弹出错误窗口,如何让它不要弹错误窗口啊?

下面两句,第一句可以打开浏览器正常,第二句 弹出一个错误对话框,点确定没用,关不掉。问题就是第二句,如何不让它弹出对话框,而是返回错误给err。

err := exec.Command("cmd", "/c","start chrome http://www.baidu.com").Run()
err = exec.Command("cmd","/c", "start luanxie ").Run()

错误截图

目的:用cmd命令调用chrome浏览器,现在如何客户端没有安装chrome浏览器,就会弹出这个对话框,点确定按钮都没有 对话框关不了,各位给点好方法啊,

已邀请:

Ky

赞同来自:

你可以先用 exec.LookPath() 来判断是否有你要执行的程序

jicg - 杂而不精

赞同来自:

  1. 测试一:

    • 语句:
      err := exec.Command("start", "chrome www.baidu.com").Run() 
    • 结果:

      不弹框,有提示报错 “exec: "start": executable file not found in %PATH%”,但是打不开浏览器,方案不行。

  2. 测试二:

    • 语句:
      err := exec.Command("cmd", "start  chrome www.baidu.com").Run() 
    • 结果:

      毫无反应,也不提示错误,也不打开浏览器。

  3. 测试三:
    • 语句:
      err := exec.Command("cmd", "/c","start chrome http://www.baidu.com").Run() 
    • 结果

      可以打开浏览器,但是如果将“chrome”改成“kkkkchrome”,就弹框报错,弹框还取消不了。

Ky

赞同来自:

exec.Command("calc.exe").Run()

exec.Command("notepad.exe", "c:/a.txt").Run()

这不行?

jicg - 杂而不精

赞同来自:

目前找到了一个检测注册表的可行方案,地址是 stackoverflow.com

jicg - 杂而不精

赞同来自:

注册表方案的代码,供以后需要用到时参考:

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
}

Ky

赞同来自:

你这里不应该强制用户优先用chrome打开网页,应该用默认浏览器打开,因为这是用户的选择 如果用户安装了 chrome 并且喜欢 chrome,那么 chrome 应该是默认浏览器,否则就是其他的 所以最好是用默认浏览器打开,这样命令就很简单,也不会弹窗

cmd /c start "" "https://www.baidu.com"

jicg - 杂而不精

赞同来自:

@Ky 我这里的,需求就是如果用户安装了chrome,就强制用户用chrome打开网页的。因为ie的兼容性差,前端不想美化ie7、8的页面,都是推荐用户安装谷歌浏览器,正常用户都只会些简单的电脑操作,只好帮他们选择。需求是是这样。

要回复问题请先登录注册