通过 GUID 卸载应用程序

我尝试使用 GUID 卸载产品,当我在命令提示符下直接执行它时效果很好,但是,当我尝试使用 Golang 执行它时收到错误消息


我的代码:


// Powershell_Command

package main


import (

    "fmt"

    "os/exec"

)


func main() {

    out, err := exec.Command("cmd","/C","wmic","product","where","IdentifyingNumber=\"{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\"","call","uninstall").Output()

    fmt.Println("err::",err)

    fmt.Println("out::",string(out))

}

输出是:


错误:: 退出状态 2147749911


出去::


提前致谢


白衣非少年
浏览 133回答 1
1回答

慕码人2483693

(这个问题在很大程度上与 Go 无关。)不过有几点需要注意:不要调用cmd.exe:它是为了运行脚本,您不是在运行脚本,而只是调用程序。所以你的电话变成 out, err := exec.Command("wmic.exe", "product", "where",      `IdentifyingNumber="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"`,      "call", "uninstall").Output()(请注意使用反引号来制作“原始”字符串——这有助于防止“反斜杠”。您不会获取正在运行的程序的标准错误流。考虑使用CombinedOutput()的的exec.Cmd类型。另一点:除非您的 Go 程序是“GUI”子系统(即,不打算在控制台窗口中运行),否则通常更明智的做法是让生成的程序输出任何输出到与其宿主进程相同的媒体。为此,您只需将其标准流连接到您的流程中:cmd := exec.Command("foo.exe", ...)cmd.Stdin = os.Stdincmd.Stdout = os.Stdoutcmd.Stderr = os.Stderrerr := cmd.Run()您也不需要wmic——只需msiexec直接调用:msiexec.exe /uninstall {GUID}原因是无论如何wmic最终都会调用msiexec,因为除了调用其卸载程序之外,没有其他方法可以卸载 Windows 应用程序。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go