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:
- Pack
installutil.exe
(¿Se requiere?) - Ejecute
installutil.exe
MyService.exe - 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.
Si desea evitar el reinicio cuando el usuario se actualice, debe detener el servicio antes de copiar el exe y comenzar de nuevo después.
Hay algunas funciones de script para hacer esto en Servicio - Funciones para iniciar, detener, instalar, eliminar un servicio