Не удается удалить исполняемый файл службы после его удаления - PullRequest
4 голосов
/ 16 сентября 2010

Я удаляю службу следующим образом:

using (AssemblyInstaller installer = new AssemblyInstaller(serviceFileName, new String[] { }))
{
    installer.UseNewContext = true;
    installer.Uninstall(null);
}

, которая работает нормально, но затем я пытаюсь сделать Directory.Delete и выдает исключение, сообщающее, что доступ к исполняемому файлу службы был запрещен,Тем не менее, сразу после этого я могу удалить файл вручную в проводнике Windows.

Мое приложение запускается установщиком, который запрашивает доступ администратора, поэтому я предполагаю, что у него есть права на файл.Фактически, он удаляет все остальные файлы в этом каталоге, но не может получить этот.Я также проверил, и файл не только для чтения.

Есть идеи, почему я не могу удалить этот файл?

1 Ответ

4 голосов
/ 22 сентября 2010

Оказывается, есть дескриптор этого файла, который остается открытым.Решением было создать новый домен AppDomain, в котором запускается установщик, и закрыть его перед попыткой удаления:

var domain = AppDomain.CreateDomain("MyDomain");

using (AssemblyInstaller installer = domain.CreateInstance(typeof(AssemblyInstaller).Assembly.FullName, typeof(AssemblyInstaller).FullName, false, BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.ExactBinding, null, new Object[] { serviceFileName, new String[] { } }, null, null, null).Unwrap() as AssemblyInstaller)
{
    installer.UseNewContext = true;
    installer.Uninstall(null);
}

AppDomain.Unload(domain);
...