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

本文关键字:开始 程序 参数 何运行 运行 一个 不知道 | 更新日期: 2023-09-27 17:47:21

题主没有说太多,因为很难用一行来质疑。我必须执行一些从注册表中读取的程序。我必须从有人保存整个路径和参数的字段中阅读。
我一直在使用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. 你可以调用cmd.exe,使用/C [你的命令行]作为参数。这会导致 cmd.exe 处理您的命令,然后退出。
  2. 您可以将命令写入批处理文件并启动该文件。

当然,还有你现在正在采取的方法,即解析命令行。

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

lpApplicationName 参数可以是 零。在这种情况下,模块名称 必须是第一个白色 空格分隔的标记在 lp命令行字符串。 ...

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

var processStartInfo = new ProcessStartInfo()
{
    UseShellExecute = false,
    Arguments = cmd
};
Process.Start(processStartInfo);
相关文章: