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

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

有帮助吗?

解决方案

我使用带有进程启动信息的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. 您可以使用/ C [您的命令行]作为参数调用cmd.exe。这会导致cmd.exe处理您的命令,然后退出。
  2. 您可以将命令写入批处理文件并启动它。
  3. 当然,你现在正采取的方法是解析命令行。

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

  

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

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

var processStartInfo = new ProcessStartInfo()
{
    UseShellExecute = false,
    Arguments = cmd
};
Process.Start(processStartInfo);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top