2010-02-12 26 views
45

Estoy intentando instalar un proyecto de servicio de Windows C# utilizando un proyecto de implementación de VisualStudio.Net.Credenciales al instalar el servicio de Windows

Para ejecutar el proyecto de implementación hago clic derecho y selecciono "instalar" desde el menú contextual, el asistente de instalación se ejecuta y finalmente me solicita un diálogo "Establecer inicio de sesión de servicio" que solicita el nombre de usuario & contraseña.

Cuando instalo un servicio utilizando la utilidad sc desde la línea de comandos, no es necesario que proporcione las credenciales.

¿Tengo que crear un inicio de sesión solo para este servicio? Preferiría usar "Sistema local" o "Servicio de red" (no estoy seguro de cuál es la diferencia) como lo hacen otros servicios.

Respuesta

80

Agregue este código a su método de vacío privado InitializeComponent() en el archivo projectInstaller.Designer.cs en su proyecto de servicio de Windows.

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem; 

si la definición de procesar instalador es:

private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1; 
+1

Eso es lo que necesitaba. ¡Gracias! – Keith

+0

De nada :) – anthares

+0

@anthares Necesito ejecutar el servicio como usuario actual, ¿cómo puedo solucionarlo? Yo uso: ServiceAccount.Usuario, pero obtenga la solicitud de contraseña cuando lo instale ... – Zhenya

4

En el proyecto que contiene el servicio, añadir una clase de instalador. Hacer que se vea algo como esto:

[RunInstaller(true)] 
public class MyServiceInstaller : Installer 
{ 
    public MyServiceInstaller() 
    { 
     ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller(); 
     serviceProcessInstaller.Account = ServiceAccount.LocalSystem; // Or whatever account you want 

     var serviceInstaller = new ServiceInstaller 
     { 
      DisplayName = "Insert the display name here", 
      StartType = ServiceStartMode.Automatic, // Or whatever startup type you want 
      Description = "Insert a description for your service here", 
      ServiceName = "Insert the service name here" 
     }; 

     Installers.Add(_serviceProcessInstaller); 
     Installers.Add(serviceInstaller); 
    } 

    public override void Commit(IDictionary savedState) 
    { 
     base.Commit(savedState); 

     // This will automatically start your service upon completion of the installation. 
     try 
     { 
      var serviceController = new ServiceController("Insert the service name here"); 
      serviceController.Start(); 
     } 
     catch 
     { 
      MessageBox.Show(
       "Insert a message stating that the service couldn't be started, and that the user will have to do it manually"); 
     } 
    } 
} 

Luego, en el explorador de soluciones, haga clic en el proyecto de implementación y seleccione "Ver> Acciones personalizadas". Haga clic con el botón derecho en Acciones personalizadas y seleccione "Agregar acción personalizada ..." Seleccione la Carpeta de la aplicación y seleccione la salida principal del proyecto que contiene el servicio. Ahora las acciones personalizadas (Commit desde arriba) se ejecutarán después de la instalación. Puede agregar los métodos adicionales (Install, Rollback, Uninstall) si necesita otras acciones personalizadas.

+0

¿Acepto esto? ¿Cómo esto va a ayudarlo a configurar la cuenta del sistema como ejecutante del servicio? – anthares

+0

Eso es lo que obtengo al copiar el código de mi proyecto. {facepalm} En el método 'Install' del instalador de mi proyecto, estaba configurando la propiedad 'Cuenta'. Ahora está arreglado ... – fre0n

+0

Gran información. ¡Gracias! – Keith

2
  1. Abra su ProjectInstaller
  2. Haga clic derecho en la ProcessInstaller y elegir las características
  3. de la Cuenta desplegable, en Varios, seleccione la cuenta que desea que su servicio se ejecute como

Para más detalles de las diferentes cuentas y sus privilegios ver el siguiente enlace:

http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceaccount.aspx

+1

No puedo ver el menú desplegable de Cuenta en Varios, VS 2010 – Zabaa

+0

Se refería a ServiceProcessInstaller, no a ProcessInstaller. – Zoomzoom

14

comprobar este acoplamiento: http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx

Prestar atención a esta sección: Para crear los instaladores para su servicio

realizar cambios en su ServiceProcessInstaller:

En el diseñador, haga clic ServiceProcessInstaller1 de un proyecto de Visual Basic o serviceProcessInstaller1 para un proyecto de Visual C#. Establezca la propiedad Cuenta en LocalSystem. Esto hará que el servicio se instale y se ejecute en una cuenta de servicio local.

+1

Esto tiene prioridad sobre establecerlo mediante el código en el archivo projectInstaller.Designer.cs. – Jerther

Cuestiones relacionadas