1. ホーム
  2. c#

[解決済み] Inno Setup for Windows サービス?

2022-10-22 08:25:52

質問

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

基本的には、次のようなことをしなければなりません。

  1. パック installutil.exe (必須か?)
  2. 実行 installutil.exe MyService.exe
  3. MyService の起動

また、以下のコマンドを実行するアンインストーラーを用意したい。

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"