visual studio servicio reconoce interno externo crear como comando .net windows-services installer windows-installer

.net - servicio - windows service installer visual studio 2017



Usar InstallUtil y configurar silenciosamente un inicio de sesión de servicio de Windows nombre de usuario/contraseña (5)

Bravo a mi compañero de trabajo (Bruce Eddy). Encontró una forma en que podemos hacer esta llamada de línea de comandos:

installutil.exe /user=uname /password=pw myservice.exe

Se realiza anulando OnBeforeInstall en la clase de instalador:

namespace Test { [RunInstaller(true)] public class TestInstaller : Installer { private ServiceInstaller serviceInstaller; private ServiceProcessInstaller serviceProcessInstaller; public OregonDatabaseWinServiceInstaller() { serviceInstaller = new ServiceInstaller(); serviceInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic; serviceInstaller.ServiceName = "Test"; serviceInstaller.DisplayName = "Test Service"; serviceInstaller.Description = "Test"; serviceInstaller.StartType = ServiceStartMode.Automatic; Installers.Add(serviceInstaller); serviceProcessInstaller = new ServiceProcessInstaller(); serviceProcessInstaller.Account = ServiceAccount.User; Installers.Add(serviceProcessInstaller); } public string GetContextParameter(string key) { string sValue = ""; try { sValue = this.Context.Parameters[key].ToString(); } catch { sValue = ""; } return sValue; } // Override the ''OnBeforeInstall'' method. protected override void OnBeforeInstall(IDictionary savedState) { base.OnBeforeInstall(savedState); string username = GetContextParameter("user").Trim(); string password = GetContextParameter("password").Trim(); if (username != "") serviceProcessInstaller.Username = username; if (password != "") serviceProcessInstaller.Password = password; } } }

Necesito usar InstallUtil para instalar un servicio de Windows C #. Necesito configurar las credenciales de inicio de sesión del servicio (nombre de usuario y contraseña). Todo esto debe hacerse en silencio.

¿Hay alguna manera de hacer algo como esto?

installutil.exe myservice.exe /customarg1=username /customarg2=password


No, installutil no es compatible.

Por supuesto, si escribiste un instalador; con una acción personalizada, entonces usted podría usar eso como parte de una MSI o vía installutil.


También puede forzar que su servicio se ejecute como Usuario utilizando ServiceProcessInstaller :: Account = ServiceAccount.User ;

Aparecerá una ventana emergente que le preguntará "[dominio /] usuario, contraseña" durante la instalación del servicio.

public class MyServiceInstaller : Installer { /// Public Constructor for WindowsServiceInstaller public MyServiceInstaller() { ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller(); ServiceInstaller serviceInstaller = new ServiceInstaller(); //# Service Account Information serviceProcessInstaller.Account = ServiceAccount.User; // and not LocalSystem; ....


Una forma mucho más sencilla que las publicaciones anteriores y sin código adicional en su instalador es utilizar lo siguiente:

installUtil.exe / username = dominio / nombre de usuario / contraseña = contraseña / desatendido C: / My.exe

Solo asegúrate de que la cuenta que usas sea válida. Si no, recibirás una excepción de "No se realizó el mapeo entre los nombres de las cuentas y la identificación de seguridad".


InstallUtil.exe establece StartupType = Manual

En caso de que quiera iniciar automáticamente el servicio, use:

sc config MyServiceName start= auto

(Tenga en cuenta que tiene que haber un espacio después de ''='')