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”子系統(tǒng)(即,不打算在控制臺窗口中運行),否則通常更明智的做法是讓生成的程序輸出任何輸出到與其宿主進程相同的媒體。為此,您只需將其標準流連接到您的流程中:
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 關注
- 165 瀏覽
添加回答
舉報