Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 如何创建交互式命令执行_Go - Fatal编程技术网

Go 如何创建交互式命令执行

Go 如何创建交互式命令执行,go,Go,我的问题是与exec.command的交互。我想在windows上自动运行RunAs 我希望通过此应用程序在我的客户计算机上启动其他应用程序(如Ccleaner、antivirus eset online等)。因此,我创建了一个adminsys帐户,并希望使用该帐户自动启动这些不同的应用程序 cmd := exec.Command("runas", user, nameProgram) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr stdin,

我的问题是与exec.command的交互。我想在windows上自动运行RunAs

我希望通过此应用程序在我的客户计算机上启动其他应用程序(如Ccleaner、antivirus eset online等)。因此,我创建了一个adminsys帐户,并希望使用该帐户自动启动这些不同的应用程序

cmd := exec.Command("runas", user, nameProgram)

cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr

stdin, err := cmd.StdinPipe()
if err != nil {
    fmt.Println(err)
}
defer stdin.Close()
err = cmd.Start()
if err != nil {
    fmt.Println(err)
    return
}

time.Sleep(3 * time.Second)
io.WriteString(stdin, password)

err = cmd.Wait()
if err != nil {
    fmt.Println(err)
    return
}
这不行

运行方式的错误

Erreur de RUNAS : Impossible d’exécuter - C:\program.exe 
1326 : Le nom d’utilisateur ou le mot de passe est incorrect.
他好像不认识密码。当我直接在命令提示符下执行此操作时,它会起作用


我没有运行windows,您问题中的代码对我有用。因此,以下内容可能无法解决您的问题,但这是将字符串传递给命令的替代方法

我创建了名为
pass
的基本命令,以断言密码的正确性:

func main() {

    fmt.Print("Enter your password please: ")
    reader := bufio.NewReader(os.Stdin)
    password, err := reader.ReadString('\n')
    if err != nil {
        fmt.Println("An error occurred while reading line")
    }

    // Remove the line break
    password = password[:len(password)-1]

    if password == "Secret pass" {
        fmt.Println("Success !")
    } else {
        fmt.Println("Failure !")
    }

}
现在,不要使用管道,而是将命令的
Stdin
设置为新读取器:

func main() {
    cmd := exec.Command("pass")
    cmd.Stdin = strings.NewReader("Secret pass!\n")
    cmd.Stdout = os.Stdout
    _ = cmd.Run()
    // Failure

    cmd = exec.Command("pass")
    cmd.Stdin = strings.NewReader("Secret pass\n")
    cmd.Stdout = os.Stdout
    _ = cmd.Run()
    // Success
}

希望这有帮助。

您能试试:
exec.Command(“cmd”,“runas”)
(确保您的程序具有管理权限,可以使用
runas
命令,而不使用
“cmd”
,但要求输入密码。我希望我可以通过go输入密码,而不是在命令提示符下输入-@TicoCheck回答:海报似乎找到了一种方法!抱歉,我最好解释一下自己。我希望通过此应用程序启动其他应用程序(如Ccleaner、antivirus eset online等)所以我创建了一个adminsys帐户,我想用这个帐户自动启动这些不同的应用程序@Tico@samuelmichaux也许编辑你的问题并添加你的评论会更好。没有变化。这是一样的-(