你如何运行一个你不知道参数开始的程序?

时间:2008-10-20 22:46:16

标签: c# .net registry system.diagnostics processstartinfo

主题并没有说太多,因为在一行中提出问题并不容易。 我必须执行一些我从注册表中读取的程序。我必须从有人保存整个路径和论点的字段中读取 我一直在使用System.Diagnostics.ProcessStartInfo设置程序的名称及其参数,但我发现了各种各样的参数,我必须解析这些参数以将进程可执行文件保存在一个字段中,将其参数保存在另一个字段中。

有没有办法按原样执行整个字符串?

3 个答案:

答案 0 :(得分:6)

我使用带有进程启动信息的cmd.exe以与上面的海报相同的方式解决了这个问题。

Process myProcess = New Process;
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将终止进程。

答案 1 :(得分:0)

事实上,有几个。

  1. 您可以使用/ C [您的命令行]作为参数调用cmd.exe。这会导致cmd.exe处理您的命令,然后退出。
  2. 您可以将命令写入批处理文件并启动它。
  3. 当然,你现在正采取的方法是解析命令行。

答案 2 :(得分:0)

如果未设置“UseShellExecute”,System.Diagnostics.Process会调用CreateProcessCreateProcessAsUser来实际启动程序(如果指定用户/它会使用第二个程序)域/密码)。这两个调用都可以将命令和文件作为单个参数。来自MSDN:

  

lpApplicationName参数可以是   空值。在这种情况下,模块名称   必须是第一个白人   空格分隔的标记   lpCommandLine字符串。 ...

lpApplication name映射到ProcessStartInfo.Filename,lpCommandLine映射到Arguments。所以你应该只是去:

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