如何在进程中使用msinfo32.exe命令行?

时间:2013-07-28 16:49:09

标签: c# windows

我有这个简单的代码:

private void MsInfo()
        {
            Process proc = new Process();
            proc.EnableRaisingEvents = true;
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.FileName = "msinfo32.exe";
            proc.StartInfo.CreateNoWindow = true;
            proc.StartInfo.Arguments = "/nfo " + contentDirectory + "\\msinfo.nfo";
            proc.StartInfo.WorkingDirectory = contentDirectory;
            proc.Start();
            proc.WaitForExit();
            proc.Close();
        }

我想在contentDirectory目录中创建msinfo.nfo。 contentDirectory现在是:

C:\ Users \ bout0_000 \ AppData \ Local \ Diagnostic_Tool_Blue_Screen \ Diagnostic Tool Blue Screen \ SF_28-07-13

我想在参数中使用变量contentDirectory的原因是目录SF_28-07-13每天都在变化。 Tommorow将是SF_29-07-13

如果我愿意参与论证:

proc.StartInfo.Arguments =“/ nfo C:\ TEST \ TEST.NFO”然后将在C:\ TEST中创建文件TEST.NFO

但由于某种原因,当我使用contentDirectory变量时,我无法在任何地方看到msinfo.nfo文件。

相反,我在以下位置看到名为Diagnostic的奇怪文件名:

C:\用户\ bout0_000 \应用程序数据\本地\ Diagnostic_Tool_Blue_Screen 从contentDirectory

返回的两个目录

诊断文件是24mb并且没问题,但那不是我想要创建的文件名,而不是在这个位置。

我在参数中尝试了很多方法,并删除/删除了这一行:proc.StartInfo.WorkingDirectory = contentDirectory;

但没有任何效果。

我还能做什么?

3 个答案:

答案 0 :(得分:1)

的字符串
C:\Users\bout0_000\AppData\Local\Diagnostic_Tool_Blue_Screen\Diagnostic Tool Blue Screen\SF_28-07-13\msinfo.nfo

应该是双引号:

"C:\Users\bout0_000\AppData\Local\Diagnostic_Tool_Blue_Screen\Diagnostic Tool Blue Screen\SF_28-07-13\msinfo.nfo"

使用:

proc.StartInfo.Arguments = "/nfo " + "\"" + contentDirectory + "\\msinfo.nfo" + "\"";

答案 1 :(得分:0)

您根本不需要Arguments属性的完整路径 您已经将WorkingDirectory设置为contentDirectory,因此,将自动在那里创建文件nfo。

 proc.StartInfo.Arguments = "/nfo msinfo.nfo";
 proc.StartInfo.WorkingDirectory = contentDirectory;

就像你在命令提示符下键入

C:>\ CD "\Users\bout0_000\AppData\Local\Diagnostic_Tool_Blue_Screen\Diagnostic Tool Blue Screen\SF_28-07-13"
C:\Users\bout0_000\AppData\Local\Diagnostic_Tool_Blue_Screen\Diagnostic Tool Blue Screen\SF_28-07-13> msinfo32.exe /nfo msinfo.nfo

答案 2 :(得分:0)

由于您正在设置工作目录,因此可以不使用输出文件的路径,而是应该相对于工作目录创建文件:

proc.StartInfo.Arguments = "/nfo msinfo.nfo";
proc.StartInfo.WorkingDirectory = contentDirectory;

但是,通常,当放入空格分隔的字符串时,应引用任何类型的路径,因为它们是单个项目。所以:

proc.StartInfo.Arguments = "/nfo \"msinfo.nfo\"";
proc.StartInfo.WorkingDirectory = contentDirectory;