【发布时间】:2020-02-24 13:49:04
【问题描述】:
我在代码中使用AssemblyInstaller 删除服务,之后我尝试删除 .exe 文件。
但是发生了错误:
该文件被另一个进程使用。
我试过assemblyInstaller.dispose()
但它不起作用。
using (AssemblyInstaller installer = new AssemblyInstaller(filepath, commandLineOptions))
{
installer.UseNewContext = true;
installer.Uninstall(null);
installer.Dispose();
}
【问题讨论】:
-
这完全正常,.NET 中的程序集在卸载之前无法删除。这需要卸载使用它的 AppDomain。您几乎可以肯定没有将 AssemblyInstaller 用于其预期用途,这从代码 sn-p 中是不可能看到的。 InstallUtil.exe 通常使用它来卸载/安装服务。除了添加/删除注册表项之外,它没有任何作用。
-
@Hans Passant 我认为 AssemblyInstaller 用于安装和卸载服务。您是否为此建议 InstallUtil?如何从 assemblyinstaller 卸载 appdomain?
-
是的,这就是 InstallUtil.exe 的本意。它不会导致此问题,因为它在完成其工作后终止,这也消除了组件上的锁定。如果您想自己执行此操作并保持程序运行,那么您必须在 Google 上搜索“c# how to unload an appdomain”。
-
@Hans Passant 感谢您的帮助
标签: c# windows windows-services