Also, removing a .NET Windows Service that is running under an account other than Local System/Local Service lingers in the list of services until a restart. Adding the snippet below in the project installer will reset the account to local system just before the actual uninstall. This neatly removes the service from the list.
/// Overriden to set the user account to local service.
/// If set to custom user on uninstall the service entry lingers until a reboot,
/// when set to local service the entry is removed immediately.
/// <param name="savedState">Only passed to base class.</param>
protected override void OnBeforeUninstall(IDictionary savedState)
this.serviceProcessInstaller.Account = ServiceAccount.LocalService;