Inno Setup for Windows服务?

我有一个.Net Windows服务。 我想创建一个安装程序来安装该Windows服务。

基本上,它必须做到以下几点:

  • 安装包installutil.exe (是否需要?)
  • 运行installutil.exe MyService.exe
  • 启动我的服务
  • 另外,我想提供一个运行以下命令的卸载程序:

    installutil.exe /u MyService.exe
    

    如何使用Inno Setup来完成这些操作?


    您不需要installutil.exe ,可能您甚至无权重新分配它。

    以下是我在应用程序中执行此操作的方式:

    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());
        }
    }
    

    基本上,您可以通过使用ManagedInstallerClass来自行安装/卸载服务,如示例中所示。

    然后,只需要在InnoSetup脚本中添加如下内容即可:

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

    以下是我做到的:

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

    显然,Inno安装程序具有以下常量用于引用系统上的.NET文件夹:

  • {} dotnet11
  • {} dotnet20
  • {} dotnet2032
  • {} dotnet2064
  • {} dotnet40
  • {} dotnet4032
  • {} dotnet4064
  • 更多信息在这里。


    您可以使用

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

    创建一项服务。 有关如何启动,停止,检查服务状态,删除服务等信息,请参阅“ sc.exe ”。

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

    上一篇: Inno Setup for Windows service?

    下一篇: How can I call a .NET DLL from an Inno Setup script?