Inno Setup pour Windows service?

j'ai un service .net Windows. Je veux créer un installateur pour installer ce service windows.

fondamentalement, il doit faire ce qui suit:

  1. Pack installutil.exe (est-ce nécessaire?)
  2. Exécuter installutil.exe MyService.exe
  3. Start MyService

aussi, je veux fournir un uninaller qui exécute la commande suivante:

installutil.exe /u MyService.exe

comment utiliser Inno Setup?

99
demandé sur Vikrant 2009-09-20 05:10:35

4 réponses

vous n'avez pas besoin de installutil.exe et vous n'avez probablement même pas le droit de le redistribuer.

Voici comment je le fais dans ma demande:

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 avoir votre service à installer/désinstaller sur son propre en utilisant ManagedInstallerClass comme montré dans mon exemple.

alors il suffit d'ajouter dans votre script InnoSetup quelque chose comme ceci:

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

[UninstallRun]
Filename: "{app}\MYSERVICE.EXE"; Parameters: "--uninstall"
215
répondu lubos hasko 2015-01-13 02:27:31

Voici comment je l'ai fait:

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

apparemment, Inno setup a les constantes suivantes pour référencer le dossier .NET sur votre système:

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

Plus d'informations disponibles ici .

6
répondu breez 2014-10-16 09:53:56

si vous voulez éviter les redémarrages lorsque l'utilisateur met à niveau, alors vous devez arrêter le service avant de copier l'exe et recommencer après.

il y a quelques fonctions de script pour faire ceci à Service-fonctions pour démarrer, arrêter, installer, supprimer un Service

2
répondu Tony Edgecombe 2014-03-19 18:11:46

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 " sur la façon de démarrer, d'arrêter, de vérifier l'état du service, de supprimer le service, etc.

1
répondu Steven 2010-08-15 15:38:47