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);
}
}