如何使用ConsoleAppback backround run process删除文件夹

时间:2016-04-22 05:47:20

标签: c# vb.net

我已使用C#启动了一个可执行文件。

处理启动代码:

Process process = new Process();
process.StartInfo.FileName = stopNifiexePath;
Environment.CurrentDirectory = Path.GetDirectoryName(process.StartInfo.FileName);
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = false;
process.Start();
process.WaitForExit();

Process.WaitForExit()行完成。但是,当我尝试手动删除exe文件夹时,我无法删除文件夹。抛出异常:

  

操作无法完成,因为其中的文件夹或文件已在其他程序中打开。

注意:在我停止ConsoleApplication后,ConsoleApplication6.vshost进程仍在运行。我再次尝试手动删除exe文件夹。该文件夹已删除。

如何删除在后台运行ConsoleApplication的文件夹。

3 个答案:

答案 0 :(得分:2)

将当前目录设置为远离您尝试删除的目录。如果您还在其中,则无法将其删除。

您可能真正想要的是设置ProcessStartInfo.WorkingDirectory,而不是Environment.CurrentDirectory

所以改变这一行:

Environment.CurrentDirectory = Path.GetDirectoryName(process.StartInfo.FileName); 

这个

process.WorkingDirectory = Path.GetDirectoryName(process.StartInfo.FileName);

答案 1 :(得分:0)

尝试拨打

process.Dispose()

Process.Exited事件中。

答案 2 :(得分:0)

您需要强制进程释放所有资源。我建议使用using代码。

using (Process process = new Process())
{
    process.StartInfo.FileName = stopNifiexePath;
    Environment.CurrentDirectory = Path.GetDirectoryName(process.StartInfo.FileName);
    process.StartInfo.CreateNoWindow = true;
    process.StartInfo.UseShellExecute = false;
    process.Start();
    process.WaitForExit();
}

这将在WaitForExit完成时处理该过程。