2016-05-28 26 views
2

私の問題はexec.commandとのやりとりです。私はWindows上でRunAsを自動化したいと思います。Golang:インタラクティブコマンドの実行方法を教えてください。

私のクライアントのコンピュータで、このアプリケーションを介して他のアプリケーション(Ccleaner、ウイルス対策esetオンラインなど)を起動します。そこで私は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. 

パスワードを認識していないようです。私はWindowsを実行していないよ

gif

+0

'exec.Command(" cmd "、" runas ")'(プログラムに 'runas'を使うための管理特権があることを確認してください) – Tico

+0

コマンドは' 'cmd ''なしで動作しますが、パスワードを入力してください。コマンドプロンプトではなく、goを使用してパスワードを入力することができます。@Tico –

+0

この回答を確認してください:http://stackoverflow.com/questions/31558066/how-to-ask-for-administer-privileges – Tico

答えて

0

コマンドプロンプトで直接それを行うとき、これは動作しますが、あなたがあなたの質問を持っているコードは、私のために動作します。だから、次のようにしても問題は解決しないかもしれませんが、これは文字列をコマンドに渡す代わりの方法です。 、代わりにパイプでの作業のため、今

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を設定します:

は私がパスワードの正しさを主張するために、 passという名前のこの基本的なコマンドを作成し

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 
} 

希望すると便利です。

+0

変更なしそれは同じことです。 :-( –

関連する問題