Мне нужно удалить каталог с файлом exe приложения. Это выглядит следующим образом:C# Разблокировка каталога и копирование файлов
- Начало App.exe из C: \ Folder \ App.exe
- App.exe само копирование в C: \ User \ Temp \ temp.exe
- App .exe закрывает себя и запустить temp.exe
- temp.exe удаляет app.exe и C: \ каталог Папка
Это хорошо выглядеть, но когда я копирование App.exe для Temp.exe, процесс Temp.exe по-прежнему использует C: \ Folder. Независимо от того, что я делаю, каждый процесс, который я начал, блокирует мой каталог.
Я создал приложение формы с кнопкой, чтобы проверить их поведение.
bool del = false;
public Form1(string[] args)
{
InitializeComponent();
this.Text = Process.GetCurrentProcess().Id.ToString();
if (args.Length > 0 && args[0] == "arg1")
{
Process proc = Process.GetProcessById(Convert.ToInt32(args[1]));
proc.Kill();
}
else if (args.Length > 0 && args[0] == "arg2")
{
del = true;
}
else
{
string tempfile = Environment.GetEnvironmentVariable("TEMP") + "\\Temp.exe";
File.Copy(Application.ExecutablePath, tempfile, true);
Process proc = new Process();
proc.StartInfo.FileName = tempfile;
proc.StartInfo.Arguments = String.Format("arg1 {0}", Process.GetCurrentProcess().Id);
proc.Start();
Application.Exit();
}
}
private void button1_Click(object sender, EventArgs e)
{
if (del == true)
{
string ApplicationPath = @"C:\Folder";
DirectoryInfo directory = new DirectoryInfo(ApplicationPath);
foreach (FileInfo file in directory.GetFiles()) file.Delete();
Directory.Delete(ApplicationPath);
}
else
{
ProcessStartInfo Info = new ProcessStartInfo();
Info.Arguments = "/C ping 127.0.0.1 -n 2 && \"" + Application.ExecutablePath + "\" arg2";
Info.WindowStyle = ProcessWindowStyle.Hidden;
Info.CreateNoWindow = true;
Info.FileName = "cmd.exe";
Process.Start(Info);
}
}
Вкратце - я ищу решение, которое удалит исходный файл exe с родительским каталогом.
Надежды на помощь. Благодарю.
В основном угадайте, но, возможно, вам нужно сначала изменить текущий рабочий каталог? https://msdn.microsoft.com/en-us/library/system.io.directory.setcurrentdirectory – David
В вашем обработчике событий нажатия кнопки, если del == true ... внутри этого оператора if проверяет, что файлы в папка не используется –
@ David спасибо! Я меняю рабочий каталог, и теперь все в порядке. – user5817386