这个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)
}
答案 0 :(得分:6)
可能会发生的情况是,在cmd.exe
进程可以读取和处理之前,您正在设法删除.bat文件。在删除文件之前,您需要等待以Process.Start
开头的进程完成。像这样:
using (var process = Process.Start(path)) {
process.WaitForExit();
}
顺便说一句,我想知道为什么你觉得需要在你不应该写的目录中创建.bat文件。您可以在临时目录下轻松创建.bat文件。如果您需要将工作目录作为其他目录,则可以在启动该过程时轻松指定。
答案 1 :(得分:4)
您很有可能在进程实际开始处理之前删除该文件。您应该存储Process
返回的Process.Start
(作为一般规则,您不应该忽略.NET中操作的返回结果)并使用WaitForExit
和然后删除文件。
using (var process = Process.Start(path)) {
process.WaitForExit();
}
记住Process
是一次性的东西,忽略结果是更糟糕的主意。