gpt4 book ai didi

go - 通过 GUID 卸载应用程序

转载 作者:数据小太阳 更新时间:2023-10-29 03:06:33 24 4
gpt4 key购买 nike

您好,我尝试使用 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::

提前致谢

最佳答案

(此题大部分与围棋无关。)

有几点需要注意:

  1. 不要调用cmd.exe:它是用来运行脚本的,你不是在运行脚本,而只是调用程序。所以你的电话变成了

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

    (注意使用反引号来制作“原始”字符串——这有助于防止“反斜杠”。

  2. 您没有获取正在运行的程序的标准错误流。

    考虑使用 exec.Cmd 类型的 CombinedOutput()

    还有一点:除非你的 Go 程序是“GUI”子系统(也就是说,不打算在控制台窗口中运行),否则通常更明智的做法是让生成的程序输出任何它输出到与其输出相同的媒体主机进程。为此,您只需将其标准流连接到您的流程:

    cmd := exec.Command("foo.exe", ...)
    cmd.Stdin = os.Stdin
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    err := cmd.Run()
  3. 您也不需要wmic——直接调用msiexec即可:

    msiexec.exe /uninstall {GUID}

    原因是 wmic 最终会调用 msiexec,因为除了调用其卸载程序之外没有其他方法可以卸载 Windows 应用程序。

    <

关于go - 通过 GUID 卸载应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34761184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com