通过 GUID 卸载应用程序
Uninstalling an application by its 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))
}
输出为:
err:: exit status 2147749911
out::
提前致谢
(此题大部分与围棋无关。)
不过有几点需要注意:
不要调用 cmd.exe
:它用于 运行ning 脚本,您不是 运行ning 脚本,而只是调用程序。所以你的电话变成
out, err := exec.Command("wmic.exe", "product", "where",
`IdentifyingNumber="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"`,
"call", "uninstall").Output()
(注意使用反引号来构成 "raw" 字符串——这有助于防止 "backslashity".
您没有获取正在 运行 的程序的标准错误流。
考虑使用 exec.Cmd
类型的 CombinedOutput()
。
还有一点:除非你的 Go 程序属于 "GUI" 子系统(也就是说,不打算在控制台 window 中 运行),否则通常更明智的做法是让spawned 程序输出它输出到与其宿主进程相同的媒体的任何内容。为此,您只需将其标准流连接到您的流程:
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 应用程序。
您好,我尝试使用 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))
}
输出为:
err:: exit status 2147749911
out::
提前致谢
(此题大部分与围棋无关。)
不过有几点需要注意:
不要调用
cmd.exe
:它用于 运行ning 脚本,您不是 运行ning 脚本,而只是调用程序。所以你的电话变成out, err := exec.Command("wmic.exe", "product", "where", `IdentifyingNumber="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"`, "call", "uninstall").Output()
(注意使用反引号来构成 "raw" 字符串——这有助于防止 "backslashity".
您没有获取正在 运行 的程序的标准错误流。
考虑使用
exec.Cmd
类型的CombinedOutput()
。还有一点:除非你的 Go 程序属于 "GUI" 子系统(也就是说,不打算在控制台 window 中 运行),否则通常更明智的做法是让spawned 程序输出它输出到与其宿主进程相同的媒体的任何内容。为此,您只需将其标准流连接到您的流程:
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 应用程序。