我的问题是与exec.command的交互。我想在Windows上自动化RunAs。
我希望通过此应用程序在我的客户的计算机上启动其他应用程序(例如Ccleaner,防病毒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
}
这不起作用!
runas的错误。
Erreur de RUNAS : Impossible d’exécuter - C:\program.exe
1326 : Le nom d’utilisateur ou le mot de passe est incorrect.
看起来他不认识密码。当我在命令提示符
中直接执行此操作时,此方法有效答案 0 :(得分:0)
我没有运行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
}
希望这有帮助。