19

**cd..**Windowsフォームの舞台裏でコマンドを実行するにはどうすればよいですか?(つまり、ユーザーはそれを見ることができません)

ありがとう。

4

2 に答える 2

22

System.Diagnostics.Processhttp ://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspxを参照してください

この同じ正確な質問に対するこのSOの答えもあります: https ://stackoverflow.com/a/1469790/25882

例:

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
startInfo.Verb = "runas";
process.StartInfo = startInfo;
process.Start();
于 2012-12-10T19:09:08.263 に答える
21

System.Diagnostics.ProcessStartInfoプロセスの開始に必要な情報を含む new を初期化できます。これはWindowStyle、プロセスの開始時に使用するウィンドウの状態Hidden( 、MaximizedMinimizedまたは) を示しNormalます。あなたの場合、Hidden開始されるプロセスが入力を受信したり、ユーザーから/への出力を表示したりできないように、これを設定します。

System.Diagnostics.ProcessStartInfo myProcessInfo = new System.Diagnostics.ProcessStartInfo(); //Initializes a new ProcessStartInfo of name myProcessInfo
myProcessInfo.FileName = Environment.ExpandEnvironmentVariables("%SystemRoot%") + @"\System32\cmd.exe"; //Sets the FileName property of myProcessInfo to %SystemRoot%\System32\cmd.exe where %SystemRoot% is a system variable which is expanded using Environment.ExpandEnvironmentVariables
myProcessInfo.Arguments = "cd.."; //Sets the arguments to cd..
myProcessInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //Sets the WindowStyle of myProcessInfo which indicates the window state to use when the process is started to Hidden
System.Diagnostics.Process.Start(myProcessInfo); //Starts the process based on myProcessInfo

スクリーンショット

次のスクリーンショットは、アプリケーションによって開始された 1 つのプロセスを示すタスク マネージャーを表しています。ただし、その Window は表示されません。

プロセスはウィンドウを表示せずに実行されています

注意: アプリケーションを終了しても、開始されたプロセスは終了しません。

さらに、プロセスを管理者として実行するにVerbは、プロセス開始情報のプロパティを次のように設定できます。runas

System.Diagnostics.ProcessStartInfo myProcessInfo = new System.Diagnostics.ProcessStartInfo(); //Initializes a new ProcessStartInfo of name myProcessInfo
myProcessInfo.FileName = Environment.ExpandEnvironmentVariables("%SystemRoot%") + @"\System32\cmd.exe"; //Sets the FileName property of myProcessInfo to %SystemRoot%\System32\cmd.exe where %SystemRoot% is a system variable which is expanded using Environment.ExpandEnvironmentVariables
myProcessInfo.Arguments = "cd.."; //Sets the arguments to cd..
myProcessInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //Sets the WindowStyle of myProcessInfo which indicates the window state to use when the process is started to Hidden
myProcessInfo.Verb = "runas"; //The process should start with elevated permissions
System.Diagnostics.Process.Start(myProcessInfo); //Starts the process based on myProcessInfo

注意: ユーザー アカウント制御を有効にしている場合、このプロセスを呼び出そうとしたアプリケーションが昇格されたアクセス許可で実行されていない場合、最初に昇格されたアクセス許可でプロセスを開始することを許可するよう求められる場合があります。

プロンプトをスキップしたい場合は、メイン アプリケーションを昇格した権限で起動できるようにする必要があると思います。これを行うには、アプリケーションのマニフェストを開き、次の行が追加されていることを確認する必要があります

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

これは、昇格されたアクセス許可でのみ起動するようにアプリケーションに指示するだけです。そのため、管理者としてプロセスを呼び出すと、プロセスの呼び出し元が管理者の下で実行されているため、プロンプトは表示されません。

ありがとう、
これがお役に立てば幸いです:)

于 2012-12-10T19:34:11.617 に答える