主题并没有说太多,因为在一行中提出问题并不容易。 我必须执行一些我从注册表中读取的程序。我必须从有人保存整个路径和论点的字段中读取 我一直在使用System.Diagnostics.ProcessStartInfo设置程序的名称及其参数,但我发现了各种各样的参数,我必须解析这些参数以将进程可执行文件保存在一个字段中,将其参数保存在另一个字段中。
有没有办法按原样执行整个字符串?
答案 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)
当然,你现在正采取的方法是解析命令行。
答案 2 :(得分:0)
如果未设置“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);