我正在卸载这样的服务:
using (AssemblyInstaller installer = new AssemblyInstaller(serviceFileName, new String[] { }))
{
installer.UseNewContext = true;
installer.Uninstall(null);
}
工作正常,但后来我尝试做一个Directory.Delete,它抛出一个异常,说拒绝访问服务的可执行文件。不久之后,我可以在Windows资源管理器中手动删除该文件。
我的应用程序由请求管理员访问权限的安装程序运行,因此我假设它拥有该文件的权限。实际上,它删除了该目录中的所有其他文件,它只是无法获取该文件。我也检查过,文件不是只读的。
为什么我无法删除此文件的任何想法?
答案 0 :(得分:4)
事实证明,该文件的句柄保持打开状态。解决方案是创建一个安装程序运行的新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);