2016-04-22 4 views
1

Я начал один исполняемый файл, используя C#.Как удалить папку с запущенным процессом ConsoleApplication

Процесс начался код:

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 вручную, но я не могу удалить папку. Исключение составляет:

Действие не может быть выполнено, так как папка или файл в нем открыты в другой программе.

Примечание: ConsoleApplication6.vshost процесс все еще работает после того, как я остановил консоль. Снова я попытался удалить папку exe вручную. Папка удалена.

Как удалить папку с ConsoleApplication работает в фоновом режиме.

+0

Если у вас есть консольное приложение открыто в Visual Studio '.vshost.exe' будет продолжать работать. Закройте проект консоли и повторите попытку. –

ответ

0

Try вызова

process.Dispose() 

В Process.Exited случае.

+0

Я использовал process.Dispose(), не работает. –

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 Завершает.

+0

WaitForExit завершена, но я не могу удалить папку –

2

Установите текущий каталог вдали от каталога, который вы пытаетесь удалить. Вы не можете удалить его, если вы все еще внутри него.

Возможно, вы действительно хотите установить ProcessStartInfo.WorkingDirectory, а не Environment.CurrentDirectory.

Так измените эту строку:

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

для этого одного

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

Пожалуйста, отправьте любой пример кода. –

+0

Просто замените эту строку Environment.CurrentDirectory = Path.GetDirectoryName (process.StartInfo.FileName); с этим ProcessStartInfo.WorkingDirectory = Path.GetDirectoryName (process.StartInfo.FileName); – Zalomon

+0

Спасибо Заломан. –

Смежные вопросы