首页 > 解决方案 > 如何使用 C# 中的 CHKDSK 工具并在 CMD 窗口中显示文本?

问题描述

我正在尝试使用从 C# Winforms 应用程序chkdsk.exe中找到的系统工具。C:\Windows\System32\chkdsk.exe我想使用 System.Diagnostics.Process 类。我正在使用 ProcessStartInfo 将文件名设置为工具,然后使用 args 属性设置我的参数。

所以我尝试使用System.Diagnostics.Processwith ProcessStartInfo。但是当用户没有权限时发生错误时,chkdsk窗口会立即关闭。所以我看到任务栏中的窗口片刻,然后什么也没说就关闭了。我都试过了UseShellExecute=truefalse。此外,我尝试重定向输出流,但在 Windows 应用程序中,如果输出流失败,我将不得不直接显示输出流,而不是显示错误或 CHKDSK 信息的 CMD 窗口。


 using (Process CHKDSK = new Process())
 {
     CHKDSK.StartInfo.WorkingDirectory = @"H:\";
     CHKDSK.StartInfo.FileName = "C:\\Windows\\System32\\chkdsk.exe";
     CHKDSK.StartInfo.Arguments = "/r /f C:";

     CHKDSK.StartInfo.UseShellExecute = true;
     //CHKDSK.StartInfo.UseShellExecute = false;       

     CHKDSK.Start();                
 }

我希望 CHKDSK 文本显示在我相信的 CMD 窗口中。因此,如果用户没有权限,窗口应该告诉用户他们没有权限,就像使用 CMD 窗口并键入"call chkdsk /r /f C:"我不想使用启动 CMD 实例并chkdsk作为参数传递一样。我只想使用 CHKDSK.exe 工具

标签: c#.netwindowswinformscmd

解决方案


要执行您需要做的事情,您必须重定向标准输出以及您正在创建的进程的标准错误流,您可以重定向到控制台或您想要的任何其他内容,例如,您可以显示来自输出和错误的文本在用户界面上的多行文本框中流式传输(如果有),或者将其写入日志文件。

有关此问题的一些想法,请参见此处:https ://stackoverflow.com/a/285841/559144


推荐阅读