Saltar al contenido

Cómo crear un instalador para un servicio de Windows .net usando Visual Studio

Natalia, parte de este gran equipo de trabajo, nos ha hecho el favor de escribir esta reseña porque conoce a la perfección dicho tema.

Solución:

En el proyecto de servicio, haga lo siguiente:

  1. En el explorador de soluciones, haga doble clic en el archivo .cs de sus servicios. Debería mostrar una pantalla que es completamente gris y habla de arrastrar cosas desde la caja de herramientas.
  2. Luego haga clic derecho en el área gris y seleccione agregar instalador. Esto agregará un archivo de proyecto de instalación a su proyecto.
  3. Luego, tendrá 2 componentes en la vista de diseño de ProjectInstaller.cs (serviceProcessInstaller1 y serviceInstaller1). A continuación, debe configurar las propiedades que necesite, como el nombre del servicio y el usuario con el que debe ejecutarse.

Ahora necesitas hacer un proyecto de instalación. Lo mejor que puede hacer es utilizar el asistente de configuración.

  1. Haga clic con el botón derecho en su solución y agregue un nuevo proyecto: Agregar> Nuevo proyecto> Proyectos de configuración e implementación> Asistente de configuración

    una. Esto podría variar ligeramente para diferentes versiones de Visual Studio. B. Visual Studio 2010 se encuentra en: Plantillas de instalación> Otros tipos de proyectos> Configuración e implementación> Instalador de Visual Studio

  2. En el segundo paso, seleccione “Crear una instalación para una aplicación de Windows”.

  3. En el tercer paso, seleccione “Salida primaria de …”

  4. Haga clic para finalizar.

A continuación, edite su instalador para asegurarse de que se incluya la salida correcta.

  1. Haga clic derecho en el proyecto de instalación en su Explorador de soluciones.
  2. Seleccione Ver> Acciones personalizadas. (En VS2008 podría ser Ver> Editor> Acciones personalizadas)
  3. Haga clic con el botón derecho en la acción Instalar en el árbol de Acciones personalizadas y seleccione ‘Agregar acción personalizada …’
  4. En el cuadro de diálogo “Seleccionar elemento en el proyecto”, seleccione Carpeta de la aplicación y haga clic en Aceptar.
  5. Haga clic en Aceptar para seleccionar la opción “Salida principal de …”. Debería crearse un nuevo nodo.
  6. Repita los pasos 4 a 5 para las acciones de confirmación, reversión y desinstalación.

Puede editar el nombre de salida del instalador haciendo clic con el botón derecho en el proyecto del instalador en su solución y seleccione Propiedades. Cambie el ‘Nombre del archivo de salida:’ a lo que desee. Al seleccionar también el proyecto del instalador y mirar las ventanas de propiedades, puede editar el Product Name, Title, Manufacturer, etc …

A continuación, compile su instalador y generará un MSI y un setup.exe. Elija el que desee utilizar para implementar su servicio.

Sigo el primer conjunto de pasos de Kelsey para agregar las clases del instalador a mi proyecto de servicio, pero en lugar de crear un instalador MSI o setup.exe, hago que el servicio se instale / desinstale automáticamente. Aquí hay un código de muestra de uno de mis servicios que puede usar como punto de partida.

public static int Main(string[] args)

    if (System.Environment.UserInteractive)
    
        // we only care about the first two characters
        string arg = args[0].ToLowerInvariant().Substring(0, 2);

        switch (arg)
        
            case "/i":  // install
                return InstallService();

            case "/u":  // uninstall
                return UninstallService();

            default:  // unknown option
                Console.WriteLine("Argument not recognized: 0", args[0]);
                Console.WriteLine(string.Empty);
                DisplayUsage();
                return 1;
        
    
    else
    
        // run as a standard service as we weren't started by a user
        ServiceBase.Run(new CSMessageQueueService());
    

    return 0;


private static int InstallService()

    var service = new MyService();

    try
    
        // perform specific install steps for our queue service.
        service.InstallService();

        // install the service with the Windows Service Control Manager (SCM)
        ManagedInstallerClass.InstallHelper(new string[]  Assembly.GetExecutingAssembly().Location );
    
    catch (Exception ex)
    
        if (ex.InnerException != null && ex.InnerException.GetType() == typeof(Win32Exception))
        
            Win32Exception wex = (Win32Exception)ex.InnerException;
            Console.WriteLine("Error(0x0:X): Service already installed!", wex.ErrorCode);
            return wex.ErrorCode;
        
        else
        
            Console.WriteLine(ex.ToString());
            return -1;
        
    

    return 0;


private static int UninstallService()

    var service = new MyQueueService();

    try
    
        // perform specific uninstall steps for our queue service
        service.UninstallService();

        // uninstall the service from the Windows Service Control Manager (SCM)
        ManagedInstallerClass.InstallHelper(new string[]  "/u", Assembly.GetExecutingAssembly().Location );
    
    catch (Exception ex)
    
        if (ex.InnerException.GetType() == typeof(Win32Exception))
        
            Win32Exception wex = (Win32Exception)ex.InnerException;
            Console.WriteLine("Error(0x0:X): Service not installed!", wex.ErrorCode);
            return wex.ErrorCode;
        
        else
        
            Console.WriteLine(ex.ToString());
            return -1;
        
    

    return 0;

Ni Kelsey, ni las soluciones de Brendan no me funcionan en Visual Studio 2015 Community.

Aquí están mis breves pasos sobre cómo crear un servicio con el instalador:

  1. Ejecute Visual Studio, vaya a Expediente->Nuevo->Proyecto
  2. Seleccione .NET Framework 4, en el tipo ‘Buscar plantillas instaladas’ ‘Servicio’
  3. Seleccione ‘Servicio de Windows’. Escriba el nombre y la ubicación. prensa OK.
  4. Haga doble clic en Service1.cs, haga clic con el botón derecho en el diseñador y seleccione ‘Agregar instalador’
  5. Haga doble clic en ProjectInstaller.cs. Para serviceProcessInstaller1, abra la pestaña Propiedades y cambie el valor de la propiedad ‘Cuenta’ a ‘LocalService’. Para serviceInstaller1, cambie ‘ServiceName’ y establezca ‘StartType’ en ‘Automático’.
  6. Haga doble clic en serviceInstaller1. Visual Studio crea serviceInstaller1_AfterInstall evento. Escribir código:

    private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
    
        using (System.ServiceProcess.ServiceController sc = new 
        System.ServiceProcess.ServiceController(serviceInstaller1.ServiceName))
        
            sc.Start();
        
    
    
  7. Construir solución. Haga clic derecho en el proyecto y seleccione ‘Abrir carpeta en el Explorador de archivos’. Ir a bin Debug.

  8. Cree install.bat con el siguiente script:

    :::::::::::::::::::::::::::::::::::::::::
    :: Automatically check & get admin rights
    :::::::::::::::::::::::::::::::::::::::::
    @echo off
    CLS 
    ECHO.
    ECHO =============================
    ECHO Running Admin shell
    ECHO =============================
    
    :checkPrivileges 
    NET FILE 1>NUL 2>NUL
    if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges ) 
    
    :getPrivileges 
    if '%1'=='ELEV' (shift & goto gotPrivileges)  
    ECHO. 
    ECHO **************************************
    ECHO Invoking UAC for Privilege Escalation 
    ECHO **************************************
    
    setlocal DisableDelayedExpansion
    set "batchPath=%~0"
    setlocal EnableDelayedExpansion
    ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%OEgetPrivileges.vbs" 
    ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%OEgetPrivileges.vbs" 
    "%temp%OEgetPrivileges.vbs" 
    exit /B 
    
    :gotPrivileges 
    ::::::::::::::::::::::::::::
    :START
    ::::::::::::::::::::::::::::
    setlocal & pushd .
    
    cd /d %~dp0
    %windir%Microsoft.NETFrameworkv4.0.30319InstallUtil /i "WindowsService1.exe"
    pause
    
  9. Cree el archivo uninstall.bat (cambie en la línea pen-ult /i para /u)
  10. Para instalar e iniciar el servicio, ejecute install.bat, para detener y desinstalar, ejecute uninstall.bat

Comentarios y valoraciones del tutorial

Si haces scroll puedes encontrar los comentarios de otros programadores, tú aún eres capaz dejar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *