2


0

主題は多くの理由を言っていませんそれが一行で質問することは容易ではないです。 レジストリから読み込んだいくつかのプログラムを実行する必要があります。 誰かが全体のパスと引数を保存しているフィールドから読む必要があります。 プログラムの名前とその引数を設定するためにSystem.Diagnostics.ProcessStartInfoを使用してきましたが、プロセス実行可能ファイルを1つのフィールドに保存し、その引数を別のフィールドに保存するために解析する必要があるさまざまな引数を見つけました。

文字列全体をそのまま実行する方法はありますか?

3 回答


6


プロセス開始情報を付けてcmd.exeを使用して、上のポスターと同じ方法でこれに取り組みました。

プロセスmyProcess =新しいプロセス。 myProcess.StartInfo.FileName = "cmd.exe"; myProcess.StartInfo.Arguments = "/ C" cmd; myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; myProcess.StartInfo.CreateNoWindow = True; myProcess.Start(); myProcess.WaitForExit(); myProcess.Close();

cmd / cはコマンドを実行して終了します。 WaitForExitは、実行時間が長すぎるとプロセスを終了します。


0


実際にはいくつかあります。

  1. 引数として/ C [あなたのコマンドライン]を使ってcmd.exeを呼び出すことができます。 これにより、cmd.exeがコマンドを処理して終了します。

  2. コマンドをバッチファイルに書き込んで起動することができます。

そしてもちろん、あなたが今取っているアプローチ、すなわちコマンドラインを解析することもあります。


0


「http://msdn.microsoft.com/ja-jp/library/system.diagnostics.processstartinfo.useshellexecute.aspx[UseShellExecute]」が設定されていない場合、System.Diagnostics.Processはhttp://msdn.microsoftを呼び出します。実際にプログラムを起動するには、com / ja-jp / library / ms682425(VS.85).aspx [CreateProcess]またはhttp://msdn.microsoft.com/ja-jp/library/ms682429.aspx [CreateProcessAsUser]を使用します2番目は、ユーザー/ドメイン/パスワードを指定した場合です。 また、これらの呼び出しは両方とも、コマンドとファイルを単一の引数として受け取ることができます。 MSDNから:

_ lpApplicationNameパラメーターはNULLにすることができます。 その場合、モジュール名はlpCommandLine文字列内の最初の空白で区切られたトークンでなければなりません。 …​ _

lpApplication名はProcessStartInfo.Filenameにマップされ、lpCommandLineは引数にマップされます。 それで、あなたはただ行くためにalbeであるべきです:

var processStartInfo = new ProcessStartInfo()
{
    UseShellExecute = false,
    Arguments = cmd
};
Process.Start(processStartInfo);