Не удается удалить исполняемый файл службы после его удаления
Я удаляю такой сервис:
using (AssemblyInstaller installer = new AssemblyInstaller(serviceFileName, new String[] { }))
{
installer.UseNewContext = true;
installer.Uninstall(null);
}
который работает нормально, но затем я пытаюсь сделать Directory.Delete, и он выдает исключение, говорящее, что доступ к исполняемому файлу службы был запрещен. Тем не менее, сразу после этого я могу удалить файл вручную в проводнике Windows.
Мое приложение запускается установщиком, который запрашивает доступ администратора, поэтому я предполагаю, что у него есть права на файл. Фактически, он удаляет все остальные файлы в этом каталоге, но не может получить этот. Я также проверил, и файл не только для чтения.
Есть идеи, почему я не могу удалить этот файл?
1 ответ
Оказывается, есть дескриптор этого файла, который остается открытым. Решением было создать новый домен 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);