J'ai un service Windows .Net. Je veux créer un programme d'installation pour installer ce service Windows.
Fondamentalement, il doit faire ce qui suit:
installutil.exe
(Est-ce obligatoire?)installutil.exe
MyService.exeJe souhaite également fournir un programme de désinstallation qui exécute la commande suivante:
installutil.exe /u MyService.exe
Comment faire cela en utilisant Inno Setup?
Vous n'avez pas besoin de installutil.exe
et vous n'avez probablement même pas le droit de le redistribuer.
Voici la façon dont je le fais dans mon application:
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());
}
}
Fondamentalement, vous pouvez faire installer/désinstaller votre service par lui-même en utilisant ManagedInstallerClass
comme indiqué dans mon exemple.
Il suffit ensuite d'ajouter à votre script InnoSetup quelque chose comme ceci:
[Run]
Filename: "{app}\MYSERVICE.EXE"; Parameters: "--install"
[UninstallRun]
Filename: "{app}\MYSERVICE.EXE"; Parameters: "--uninstall"
Voici comment je l'ai fait:
Exec(ExpandConstant('{dotnet40}\InstallUtil.exe'), ServiceLocation, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
Apparemment, la configuration d'Inno a les constantes suivantes pour référencer le dossier .NET sur votre système:
Plus d'informations disponibles ici .
Vous pouvez utiliser
Exec(
ExpandConstant('{sys}\sc.exe'),
ExpandConstant('create "MyService" binPath= {app}\MyService.exe start= auto DisplayName= "My Service" obj= LocalSystem'),
'',
SW_HIDE,
ewWaitUntilTerminated,
ResultCode
)
pour créer un service. Voir "sc.exe" pour savoir comment démarrer, arrêter, vérifier l'état du service, supprimer le service, etc.
Si vous souhaitez éviter les redémarrages lors de la mise à niveau de l'utilisateur, vous devez arrêter le service avant de copier l'exe et recommencer après.
Il existe des fonctions de script pour ce faire à Service - Fonctions pour démarrer, arrêter, installer, supprimer un service