c# - 如何使用 C# 中的 CHKDSK 工具并在 CMD 窗口中显示文本?
问题描述
我正在尝试使用从 C# Winforms 应用程序chkdsk.exe
中找到的系统工具。C:\Windows\System32\chkdsk.exe
我想使用 System.Diagnostics.Process 类。我正在使用 ProcessStartInfo 将文件名设置为工具,然后使用 args 属性设置我的参数。
所以我尝试使用System.Diagnostics.Process
with ProcessStartInfo
。但是当用户没有权限时发生错误时,chkdsk
窗口会立即关闭。所以我看到任务栏中的窗口片刻,然后什么也没说就关闭了。我都试过了UseShellExecute=true
和false
。此外,我尝试重定向输出流,但在 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 工具
解决方案
要执行您需要做的事情,您必须重定向标准输出以及您正在创建的进程的标准错误流,您可以重定向到控制台或您想要的任何其他内容,例如,您可以显示来自输出和错误的文本在用户界面上的多行文本框中流式传输(如果有),或者将其写入日志文件。
有关此问题的一些想法,请参见此处:https ://stackoverflow.com/a/285841/559144
推荐阅读
- string - 标签在 javafx 1.0 中以 ''..." 结尾
- vue.js - Vuex 动作和对话窗口
- powershell - Powershell,CSV 导入
- bash - FFmpeg batch convert multiple files
- html - 流 base64 图像 - img vs canvas 标签
- azure - 具有 Azure AD v2.0 身份验证的 Sharepoint Online REST API
- ms-access - 编译错误子或未定义函数
- android - JUnit 测试无法创建帐户
- .net - 仅从公钥创建公钥证书
- css - 同一行中的 dt/dd 在换行时改变