c# windows-services inno-setup

c# - ¿Inno Setup para el servicio de Windows?



windows-services inno-setup (4)

Así es como lo hice:

Exec(ExpandConstant(''{dotnet40}/InstallUtil.exe''), ServiceLocation, '''', SW_HIDE, ewWaitUntilTerminated, ResultCode);

Aparentemente, la configuración de Inno tiene las siguientes constantes para hacer referencia a la carpeta .NET en su sistema:

  • {dotnet11}
  • {dotnet20}
  • {dotnet2032}
  • {dotnet2064}
  • {dotnet40}
  • {dotnet4032}
  • {dotnet4064}

Más información disponible here .

Tengo un servicio .Net de Windows. Quiero crear un instalador para instalar ese servicio de Windows.

Básicamente, tiene que hacer lo siguiente:

  1. Pack installutil.exe (¿Se requiere?)
  2. Ejecute installutil.exe MyService.exe
  3. Comience MyService

Además, deseo proporcionar un desinstalador que ejecute el siguiente comando:

installutil.exe /u MyService.exe

¿Cómo hacer esto usando Inno Setup?


No necesita installutil.exe y probablemente ni siquiera tiene derechos para redistribuirlo.

Así es como lo estoy haciendo en mi aplicación:

using System; using System.Collections.Generic; using System.Configuration.Install; using System.IO; using System.Linq; using System.Reflection; using System.ServiceProcess; using System.Text; static void Main(string[] args) { if (System.Environment.UserInteractive) { string parameter = string.Concat(args); switch (parameter) { case "--install": ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location }); break; case "--uninstall": ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location }); break; } } else { ServiceBase.Run(new WindowsService()); } }

Básicamente, puede hacer que su servicio se instale / desinstale solo con ManagedInstallerClass como se muestra en mi ejemplo.

Entonces, solo es cuestión de agregar algo en su script de InnoSetup a este:

[Run] Filename: "{app}/MYSERVICE.EXE"; Parameters: "--install" [UninstallRun] Filename: "{app}/MYSERVICE.EXE"; Parameters: "--uninstall"


Puedes usar

Exec( ExpandConstant(''{sys}/sc.exe''), ExpandConstant(''create "MyService" binPath= {app}/MyService.exe start= auto DisplayName= "My Service" obj= LocalSystem''), '''', SW_HIDE, ewWaitUntilTerminated, ResultCode )

para crear un servicio Consulte " sc.exe " sobre cómo iniciar, detener, verificar el estado del servicio, eliminar el servicio, etc.