InstallUtil.exe を使用せずに .NET Windows サービスをインストールする 質問する

InstallUtil.exe を使用せずに .NET Windows サービスをインストールする 質問する

C# で記述された標準の .NET Windows サービスがあります。

InstallUtil を使用せずにインストールできますか? サービス インストーラー クラスを使用する必要がありますか? どのように使用すればよいですか?

次のように呼び出せるようにしたいです:

MyService.exe -install

これは、次のように呼び出すのと同じ効果があります。

InstallUtil MyService.exe

ベストアンサー1

はい、それは完全に可能です (つまり、私はまさにこれを実行します)。適切な dll (System.ServiceProcess.dll) を参照して、インストーラー クラスを追加するだけです...

次に例を示します。

[RunInstaller(true)]
public sealed class MyServiceInstallerProcess : ServiceProcessInstaller
{
    public MyServiceInstallerProcess()
    {
        this.Account = ServiceAccount.NetworkService;
    }
}

[RunInstaller(true)]
public sealed class MyServiceInstaller : ServiceInstaller
{
    public MyServiceInstaller()
    {
        this.Description = "Service Description";
        this.DisplayName = "Service Name";
        this.ServiceName = "ServiceName";
        this.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
    }
}

static void Install(bool undo, string[] args)
{
    try
    {
        Console.WriteLine(undo ? "uninstalling" : "installing");
        using (AssemblyInstaller inst = new AssemblyInstaller(typeof(Program).Assembly, args))
        {
            IDictionary state = new Hashtable();
            inst.UseNewContext = true;
            try
            {
                if (undo)
                {
                    inst.Uninstall(state);
                }
                else
                {
                    inst.Install(state);
                    inst.Commit(state);
                }
            }
            catch
            {
                try
                {
                    inst.Rollback(state);
                }
                catch { }
                throw;
            }
        }
    }
    catch (Exception ex)
    {
        Console.Error.WriteLine(ex.Message);
    }
}

おすすめ記事