golang 检查系统中是否安装了某个软件

    技术2026-04-23  15

           最近项目有个需求,需要当前判断系统中是否安装了chrome内核的浏览器,如360极速、msedge、chrome等,如果有获取浏览器的位置。网上有各种介绍C#、Python等语言可实现此功能。我的项目是用go开发的,自己整理了一下通过注册表来判断系统是否安装了某个软件。代码如下:

    // 通过注册表来判断是否安装了某个app // 传入appName,可以是正则表达式,也可以是app的名字 // 返回系统中安装软件的路径,若找到了多个,返回路径数组 package main import ( "fmt" registry "golang.org/x/sys/windows/registry" "os/exec" "regexp" "sync" ) func hasApp(appName string) []string { queryKey := func(w *sync.WaitGroup, startKey registry.Key, res *[]string) { defer w.Done() queryPath := "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\" k, err := registry.OpenKey(startKey, queryPath, registry.READ) if err != nil { return } // 读取所有子项 keyNames, err := k.ReadSubKeyNames(0) if err != nil { return } for _, v := range keyNames { matched, err := regexp.MatchString(appName, v) if err != nil { fmt.Println("regexp error:", err) } else { if matched { tmpRegPath := queryPath + "\\" + v appKey, _ := registry.OpenKey(startKey, tmpRegPath, registry.READ) s, _, err := appKey.GetStringValue("") if err != nil { fmt.Println(err) } else { *res = append(*res, s) } } } } } res := []string{} waitGroup := new(sync.WaitGroup) waitGroup.Add(2) go queryKey(waitGroup, registry.LOCAL_MACHINE, &res) go queryKey(waitGroup, registry.CURRENT_USER, &res) waitGroup.Wait() return res }

    用到了 2个goroutines ,哈哈,也可以使用channel来传递结果,这里传递数组的地址,通过共享内存的实现方式更简单一点。判断系统上是否安装了,chrome的浏览器的结果如下图:

    查看是否暗转了360的哪些产品,如下图:

    Processed: 0.009, SQL: 10