web-dev-qa-db-ja.com

Inno Setup for Windowsサービス?

.Net Windowsサービスがあります。そのWindowsサービスをインストールするインストーラーを作成したいです。

基本的に、次のことを行う必要があります。

  1. パック installutil.exe(必要ですか?)
  2. 実行installutil.exe MyService.exe
  3. MyServiceを開始

また、次のコマンドを実行するアンインストーラーを提供したいと思います。

installutil.exe /u MyService.exe

Inno Setupを使用してこれらを行う方法は?

102
devnull

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"
223
lubos hasko

ここに私がそれをした方法があります:

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

どうやら、Innoセットアップには、システム上の.NETフォルダーを参照するための次の定数があります。

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

利用可能な詳細情報 こちら

7
breez

使用できます

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」を参照してください。

3
Steven

ユーザーがアップグレードするときに再起動を避けたい場合は、exeをコピーする前にサービスを停止し、その後で再起動する必要があります。

サービス-サービスを開始、停止、インストール、削除する関数 でこれを行うスクリプト関数がいくつかあります

2
Tony Edgecombe