我已经创建了一个Windows服务,它被设置为自动启动。我还在安装程序中添加了以下代码:
public ProjectInstaller()
{
InitializeComponent();
serviceProcessInstaller1.AfterInstall += new InstallEventHandler(serviceProcessInstaller1_AfterInstall);
}
void serviceProcessInstaller1_AfterInstall(object sender, InstallEventArgs e)
{
try
{
var sc = new ServiceController(serviceInstaller1.ServiceName);
sc.Start();
}
catch
{
}
}
protected override void OnCommitted(IDictionary savedState)
{
try
{
var sc = new ServiceController(serviceInstaller1.ServiceName);
sc.Start();
}
catch
{
}
}
服务已正确安装,但永远不会启动。
这可能是什么原因?
答案 0 :(得分:1)
也许您需要输入一些临时诊断日志记录,可能使用System.IO.File.WriteAllText();
。我知道这不是你想要的答案,但它可能会给你最快的解决方案!
try
{
var sc = new ServiceController(serviceInstaller1.ServiceName);
sc.Start();
System.IO.File.WriteAllText(@"c:\temp\servicestart.txt", "Service started");
}
catch (Exception ex)
{
System.IO.File.WriteAllText(@"c:\temp\servicestart.txt", ex.Message);
}
答案 1 :(得分:0)
在Main()
功能中确保您拥有此行:
ServiceBase.Run(new ServiceClass());
我几次离开后感到内疚
Application.Run(new Class());
(如果您从Windows窗体应用程序开始)
答案 2 :(得分:0)
我刚刚创建了一项服务,而我与你的服务有什么不同之处在于你是这样声明的
var sc = new ServiceController(serviceInstaller1.ServiceName);
var sc = new ServiceController("MyService");
我认为这根本不是问题,但在谈论服务时,一切都值得一试
编辑:
现在看看它我已经看到我使用的名称实际上是DisplayName而不是服务名称,尝试手动传递或使用serviceInstaller1.DisplayName
答案 3 :(得分:0)
是否可能依赖于其他服务。或者你试过延迟开始?
答案 4 :(得分:-1)
这对我有用
protected override void OnAfterInstall(IDictionary savedState)
{
base.OnAfterInstall(savedState);
System.ServiceProcess.ServiceController sc = new System.ServiceProcess.ServiceController(serviceInstaller1.ServiceName);
sc.Start();
}