2011-12-31 9 views
5

私は次のコードでcmdのコマンドを実行しようとしています:私は管理者としてcmdを実行し、それが完璧に動作しますが、私は実行しないときのコマンドを入力した場合、このコマンドは、管理者privelagesを必要 実行上昇過程

ProcessStartInfo cmd = new ProcessStartInfo("cmd.exe"); 
cmd.RedirectStandardInput = true; 
cmd.RedirectStandardOutput = true; 
cmd.RedirectStandardError = true; 
cmd.UseShellExecute = false; 
cmd.CreateNoWindow = true; 
cmd.WindowStyle = ProcessWindowStyle.Hidden; 
Process exec = Process.Start(cmd); 
exec.StandardInput.WriteLine("sc create \"BaliService\" binPath= \"{0}\\BaliService.exe\"", Directory.GetCurrentDirectory()); 

このアプリを管理者にしてください。私はUAC私はexeファイルを開くたびに入力を求めマニフェストファイルに

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

を追加しました。

私はこの上に複数の質問を見ていると、それらはすべて同じ権利を持つことになり、高いアプリの下で実行するすべてのプロセスを示唆しているように見えるが、これは私のために働いていません。

私はcmd.Verb = "runas";を試していないが、何のサイコロています。

+0

は 'true'に' cmd.UseShellExecute'を変更してみてくださいと 'runas'動詞を続けます。 – keyboardP

+0

はちょうどそれを試してみましたが、このエラー 'IO streams.'感謝をリダイレクトするために、falseに設定あるUseShellExecuteプロパティを持っている必要がありますProcessオブジェクトを得ました。 –

+4

それはどこで止まりますか、それは両方の方法を持つことはできません。 UACは、平滑化されていないプロセスが高いレベルの機能にハイジャックするのを防ぎます。リダイレクトできる唯一の方法は、まず自分自身を上げることです。 –

答えて

13

あなたはVerbが尊重されるように、標準出力をリダイレクトする「偽」に設定されなければならないためtrueUseShellExecuteを設定する必要があります。両方を行うことはできません。

私は、Windowsはまた、あなたが管理者/管理者以外のセキュリティ境界を越えて、標準入力/出力/エラーをリダイレクトすることはできません確信しています。 adminとして実行されているプログラムからの出力を得るには、別の方法を見つける必要があります。

私がこの記事を読んでいないが、これはあなたがより多くの情報を与えることがあります。http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx

+0

私はUseShellExecute = falseを使ってみます。動詞= "runas"; RedirectStandardInput = true;ドメイン=デュ[0]。 UserName = UserAdministrator; パスワード= SecureStringHelper.ToSecureString(pwd); LoadUserProfile = true; マニフェストでrequestedExecutionLevelを使用しています。 UseShellExecute = trueを使用すると、エラーが表示されるプロセスオブジェクトをユーザーとして開始するには、プロセスオブジェクトにUseShellExecuteプロパティをfalseに設定する必要があります。 – Kiquenet

+0

adminとして実行されているプログラムからの出力を取得するには、完全なサンプルを別の方法ですか? – Kiquenet

2

あなたProcessStartInfoオブジェクトに管理者の資格情報を割り当ててみましたか?

SecureString password = new SecureString(); 
password.AppendChar('p'); 
password.AppendChar('w'); 
cmd.UserName = "admin"; 
cmd.Password = password; 
+0

複数のPCで使用されるため、UACにプロンプ​​トを表示する必要があるため、これを行うことはできません。 –

+0

さて、意味があります。コマンドプロセスを作成して、 "sc"コマンドを直接実行する代わりに "sc"を実行するように指示する理由を教えてください。 – Abbas

+0

私はユーザがプログラムの使い方を簡単にするためにscの使い方を知らないので、winformのボタンを通してscコマンドを実行しようとしています。 –

関連する問題