2

这个 C# 程序使一个批处理文件运行它,然后应该删除该文件。当我运行程序时,如果最后一个 if 语句不存在,它会生成批处理文件并完美地执行它。但是对于最后一个 if 语句,它会创建文件并将其删除但不进行任何更改。

 string batFile;
 batFile = genBat(textBox1.Text);
 string path = "C:\\Windows\\System32\\drivers\\etc\\blocksite.bat";

 using (StreamWriter sw = new StreamWriter(path))
 {
       sw.WriteLine(@batFile);
       sw.Close();
 }

       Process.Start(path);

 if(File.Exists(path))
 {
       File.Delete(path)
 }
4

2 回答 2

6

可能发生的情况是您正在设法删除 .bat 文件,然后cmd.exe进程才能读取和处理它。在删除文件之前,您需要等待开始的过程Process.Start完成。像这样:

using (var process = Process.Start(path)) {
    process.WaitForExit();
}

顺便说一句,我确实想知道为什么您觉得需要在不应该​​编写的目录中创建 .bat 文件。您可以轻松地在临时目录下创建 .bat 文件。如果您需要工作目录是不同的目录,那么您可以在启动该过程时轻松指定它。

于 2013-06-09T21:23:04.483 回答
4

您很有可能在进程实际开始处理之前删除了文件。您应该存储Process返回的 by Process.Start(作为一般规则,您永远不应忽略 .NET 中操作的返回结果)并使用WaitForExit然后删除该文件。

using (var process = Process.Start(path)) {
  process.WaitForExit();
}

记住 aProcess是一次性的东西,忽略结果是一个更糟糕的主意。

于 2013-06-09T21:23:42.673 回答