.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フォルダーを参照するための次の定数があります。
利用可能な詳細情報 こちら 。
使用できます
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」を参照してください。
ユーザーがアップグレードするときに再起動を避けたい場合は、exeをコピーする前にサービスを停止し、その後で再起動する必要があります。
サービス-サービスを開始、停止、インストール、削除する関数 でこれを行うスクリプト関数がいくつかあります