使用cmd.exe执行DEL命令的代码将永远存在

Com*_*ser 2 .net c# command-line multithreading process

我想删除C#应用程序中临时文件夹中的所有*.tmp文件.

使用cmd.exe执行DEL命令的代码将永远存在.它Process.WaitForExit()永远存在并且Process.HasExited仍然是假的.但是如果在cmd中手动使用,相同的命令运行良好:

DEL /Q /F "C:\Users\WinUser\AppData\Local\Temp\abc\*.tmp"
Run Code Online (Sandbox Code Playgroud)

码:

Process Process = new Process();

Process.StartInfo.FileName = "cmd.exe";
Process.StartInfo.Arguments = " DEL /Q /C /F \"C:\\Users\\WinUser\\AppData\\Local\\Temp\\abc\\*.tmp\"";
Process.StartInfo.CreateNoWindow = true;
Process.StartInfo.UseShellExecute = false;
Process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

Process.Start();

Process.WaitForExit();

while (!Process.HasExited)
{
    MessageBox.Show("Error");
}
Run Code Online (Sandbox Code Playgroud)

**注意:我的错误是我在DEL之后使用/ C并且正确的命令行是:

Process.StartInfo.Arguments = " cmd /C DEL /Q /F \"C:\\Users\\WinUser\\AppData\\Local\\Temp\\abc\\*.tmp\"";
Run Code Online (Sandbox Code Playgroud)

不过,我将切换到下面提到的基于.NET框架的删除代码.但我最初选择了基于命令行(cmd.exe)的操作,因为Process.WaitForExit()执行时不会挂起程序.我在删除操作中要删除1000多个文件.

Dav*_*rno 8

您需要在参数中添加/ C:

Process.StartInfo.Arguments = "/C DEL /Q /F \"C:\\Users\\WinUser\\AppData\\Local\\Temp\\abc\\*.tmp\"";
Run Code Online (Sandbox Code Playgroud)

否则它只会运行cmd.exe而永远不会退出.

  • ShellExecute作为他们的名字说它使用ShellExecute来启动一个带有相关程序的文件,例如,使用默认文本编辑器而不是notepad.exe或.MSI安装程序运行文本文件是有用的,但不适用于CMD.exe或任何其他EXE文件,不要激活shellexecute.PS:原谅我的英语 (2认同)