После помощи других я обнаружил, что использование AssemblyInstaller вызывает проблемы. Для удаления службы мы можем использовать другие методы, такие как InstallUtil.exe или ServiceInstaller. Мы можем использовать ServiceInstaller вместо AssemblyInstaller для удаления, что не вызовет этой проблемы.
ServiceInstaller ServiceInstallerObj = new ServiceInstaller();
InstallContext Context = new InstallContext(AppDomain.CurrentDomain.BaseDirectory + "\\uninstalllog.log", null);
ServiceInstallerObj.Context = Context;
ServiceInstallerObj.ServiceName = "myService";
ServiceInstallerObj.Uninstall(null);
это удалит имя, указанное службой, а файл .exe может быть удален без проблем
EDIT
Я обнаружил, что с помощью 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[] { servicePath, new String[] { } }, null, null, null).Unwrap() as AssemblyInstaller)
{
installer.UseNewContext = true;
installer.Uninstall(null);
}
AppDomain.Unload(domain);