【发布时间】:2018-09-20 06:21:34
【问题描述】:
我想从 msinfo32 命令向用户桌面文件夹中的 nfo 文件生成报告。我直接运行这个 exe,因为命令 msinfo32 有时不在 XP 的 PATH 中。所以,这就是我想要的 C#:
"C:\Program Files\Common Files\Microsoft Shared\MSInfo\msinfo32.exe" /nfo C:\Users\someUser\Desktop\my_pc.nfo
我现在有这段代码,它调用 UAC,然后 cmd 窗口关闭。该文件未创建。为什么这不起作用?
var proc1 = new ProcessStartInfo();
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string myFile = "my_pc.nfo";
string myFullPath = Path.Combine(desktopPath, myFile);
string myCommand = @"/C C:\Program Files\Common Files\Microsoft Shared\MSInfo\msinfo32.exe /nfo " + myFullPath;
proc1.UseShellExecute = true;
proc1.WorkingDirectory = @"C:\Windows\System32";
proc1.FileName = @"C:\Windows\System32\cmd.exe";
proc1.Verb = "runas";
char quote = '"';
proc1.Arguments = "/C " + quote + myCommand + quote;
proc1.WindowStyle = ProcessWindowStyle.Normal;
Process.Start(proc1);
Console.ReadLine();
【问题讨论】:
-
难道不能直接调用msinfo32.exe,中间不调用cmd.exe吗?我认为不可能链接调用并保留参数。 /nfo 参数将成为 cmd.exe 调用的参数,并在 msinfo32“子”调用中丢失。
-
必须查明进程是否成功完成,使用ExitCode属性。如果不为 0 则失败。较大的负值往往有助于诊断异常。