Inno Setup for Windows service?

I have a .Net Windows service. I want to create an installer to install that windows service.

Basically, it has to do the following:

  • Pack installutil.exe (Is it required?)
  • Run installutil.exe MyService.exe
  • Start MyService
  • Also, I want to provide an uninstaller which runs the following command:

    installutil.exe /u MyService.exe
    

    How to do these using Inno Setup?


    You don't need installutil.exe and probably you don't even have rights to redistribute it.

    Here is the way I'm doing it in my 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());
        }
    }
    

    Basically you can have your service to install/uninstall on its own by using ManagedInstallerClass as shown in my example.

    Then it's just matter of adding into your InnoSetup script something like this:

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

    Here's how i did it:

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

    Apparently, Inno setup has the following constants for referencing the .NET folder on your system:

  • {dotnet11}
  • {dotnet20}
  • {dotnet2032}
  • {dotnet2064}
  • {dotnet40}
  • {dotnet4032}
  • {dotnet4064}
  • More information available here.


    You can use

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

    to create a service. See " sc.exe " on how to start, stop, check service status, delete service, etc.

    链接地址: http://www.djcxy.com/p/44512.html

    上一篇: 导入DLL到Inno中的问题

    下一篇: Inno Setup for Windows服务?