【发布时间】:2020-01-20 11:49:13
【问题描述】:
我经常发现自己在 pc 上使用不同的命令来检查系统中的内容,我想基本上创建一个小型独立 exe,它将执行我所有的常用命令并为我提供每个命令的输出,而无需我手动输入它们。 .. 我想指出,我知道这不是 google 上关于使用 c# 执行 cmd 命令的第一个问题,但不符合我的命令要求,例如,其中许多执行命令,例如复制或移动或制作,而不是他们有一个复杂的输出,我想执行例如“sfc /scannow”命令,它输出一个进度条,测量当然的进度和一个最终输出,问题是我尝试了很多方法来尝试,但是一切都失败了,shell执行在打开另一个cmd窗口甚至需要提升时效果很好,但是一旦进度条结束并显示最终输出,它就会崩溃(因此我看不到最终输出),shell执行关闭(通过主窗口执行)它要么根本不显示进度条,只显示最终输出,要么什么都不显示,或者它确实显示进度条,但随着每次增量,它都是一个新行,显然没有看起来不对...
这是我的代码:
public static void ExecuteCommand(string command) {
Process prc = new Process();
ProcessStartInfo info = new ProcessStartInfo
{
Verb = "runas",
FileName = "cmd.exe",
UseShellExecute = true,
Arguments = "/c" + command
};
prc.StartInfo = info;
prc.Start();
prc.WaitForExit();
prc.Close();
}
如果有人能想到解决办法,请告诉我,我已经坚持了大约 3 天...
【问题讨论】:
-
当你说你想要程序的输出时,你想让它记录在一个文件中吗?如果您想查看已执行 cmd 的进度条,AFAIK 您不应该使用日志记录,而是使用终端多路复用器。如果您在 ubuntu/bash shell 中遇到此问题,我会告诉您有关允许您想要的屏幕包的信息。我自己没有探索过它,但谷歌搜索告诉我 powershell Connect-WSMAN 可以解决问题。然而,这不是 C#,而是一个 powershell 脚本。我猜你可以在你的程序中传递 Connect-WSMAN 在 powershell 中运行。
-
@AshishJacob 好吧,让我这样说吧,正确的输出是显示进度条,然后是一个字符串,上面写着“扫描未发现任何损坏”或类似的东西,我会对进度条在此代码中的单独窗口中感到满意,但是此代码在告诉我扫描发现什么之前退出,如果我可以检索该字符串然后显示它,那会很好,但我似乎不能去做。另一种方法是在主窗口中显示所有内容,但我似乎无法正确显示进度条...
标签: c# shell console-application