我有一个用C#编写的标准.NET Windows服务.
它能在不使用InstallUtil的情况下自行安装吗?
我希望能够调用以下内容:
MyService.exe -install
它将产生与调用相同的效果:
InstallUtil MyService.exe
我有一个用C#编写的标准.NET Windows服务.
它能在不使用InstallUtil的情况下自行安装吗?
我希望能够调用以下内容:
MyService.exe -install
它将产生与调用相同的效果:
InstallUtil MyService.exe
是的,这是完全可能的(即我完全可以这样做);您只需要引用正确的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);
}
}