Windowsフォームのバックグラウンドでコマンド**cd..**
を実行するにはどうすればよいですか? (つまり、ユーザーはそれを見ることができません)
ありがとう。
System.Diagnostics.Processを参照してください http://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();
WindowStyle
、Hidden
、Maximized
、またはMinimized
のプロセスの開始時に使用するウィンドウの状態を示すNormal
に加えて、プロセスの開始に必要な情報を持つ新しいSystem.Diagnostics.ProcessStartInfo
を初期化できます。あなたのケースでは、これを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つのプロセスを示すタスクマネージャを表しています。ただし、そのウィンドウは表示されません。
通知:アプリケーションを閉じても、開始されたプロセスは終了しません。
さらに、プロセスを管理者として実行するには、プロセス開始情報の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"/>
これは、昇格したアクセス許可でのみ起動するようにアプリケーションに指示するだけです。したがって、管理者としてプロセスを呼び出す場合、プロセスの呼び出し元は管理者の下で実行されているため、プロンプトは表示されません。
おかげで、
これがお役に立てば幸いです:)
スニペットはユーザーには「見えない」だけでなく、出力をリダイレクトするため、なんらかの方法で使用できます(必要だと思います)。
string output = null;
try
{
ProcessStartInfo ps = new ProcessStartInfo("cmd");
ps.Arguments = "/c cd..";
ps.UseShellExecute = false;
// Redirects the standard output so it reads internally in out program
ps.RedirectStandardOutput = true;
// Starts the process
using (Process p = Process.Start(ps))
{
// Reads the output to a string
output = p.StandardOutput.ReadToEnd();
// Waits for the process to exit must come *after* StandardOutput is "empty"
// so that we don't deadlock because the intermediate kernel pipe is full.
p.WaitForExit();
}
}
catch
{
// manage errors
}
finally
{
if(output != null)
{
// Process your output
}
}