Inno Setup的为Windows服务?(Inno Setup for Windows serv

2019-07-18 15:27发布

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

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

  1. installutil.exe (需要它?)
  2. 运行installutil.exe MyService.exe
  3. 开始为MyService

另外,我想提供运行以下命令卸载程序:

installutil.exe /u MyService.exe

如何做到这些使用Inno Setup的?

Answer 1:

你不需要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"


Answer 2:

以下是我做的:

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

显然,创新安装有用于引用您系统上的.NET文件夹中的下列常量:

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

提供更多的信息在这里 。



Answer 3:

您可以使用

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”,停止检查服务状态,删除服务,等等。



Answer 4:

如果你想避免重新启动时的用户升级,那么你需要复制EXE之前停止服务之后再次启动。

有一些脚本的功能要做到这一点,在服务-功能启动,停止,安装,删除服务



文章来源: Inno Setup for Windows service?