1 回答
TA贡献1860条经验 获得超9个赞
(这个问题在很大程度上与 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.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
您也不需要wmic——只需msiexec直接调用:
msiexec.exe /uninstall {GUID}
原因是无论如何wmic最终都会调用msiexec,因为除了调用其卸载程序之外,没有其他方法可以卸载 Windows 应用程序。
- 1 回答
- 0 关注
- 132 浏览
添加回答
举报