106

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

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

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

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

installutil.exe /u MyService.exe

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

4

5 に答える 5

240

あなたはそれを再配布する必要はなく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"
于 2009-09-20T01:39:52.373 に答える
8

これが私がそれをした方法です:

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

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

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

詳細については、こちらをご覧ください

于 2014-10-16T09:53:56.240 に答える
6

使用できます

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

于 2010-08-15T15:33:07.720 に答える
2

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

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

于 2009-12-23T11:35:37.297 に答える
0

topshelfhttp://topshelf-project.com/をご覧 ください

  • それはあなたがコンソールアプリケーションとしてあなたのサービスを開発することを可能にします

  • 開始/停止サービスをAPIとしてサービスに追加します...

  • ...InnoSetupから呼び出すことができます

    [Run] Filename: "{app}\myservice.exe"; Parameters: "stop" ; Flags : waituntilterminated Filename: "{app}\myservice.exe"; Parameters: "uninstall" ; Flags : waituntilterminated Filename: "{app}\myservice.exe"; Parameters: "install -description ""myservice""" ; Flags : waituntilterminated

于 2021-03-25T10:14:36.600 に答える