#if DEBUG
MainService service1 = new MainService();
service1.onDebug();
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
ConfigurationSync.logDebugMessage(logMessageType.message, "Starting main service thread");
#else
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MainService()
};
ServiceBase.Run(ServicesToRun);
ConfigurationSync.logDebugMessage(logMessageType.message, "Starting main service thread");
#endif
我已经创建了我的第一个Windows服务,我想知道在Program.cs文件中启动该服务的正确方法是什么。
上面提供的代码是由在线tut向我建议的,#if debug
在Visual Studio中进行测试时运行,而else
块在以发布模式构建并安装在服务器上时运行。
问题是,如果我不使用#if debug
代码块中的代码,安装后似乎无法在服务器上运行。
如果我运行上面提供的代码,则表示服务已启动,但似乎没有任何反应,而如果我仅运行debug
块中的内容,则该服务将运行,但服务器"Service failed to start in a timely manner"
上将出现错误
任何帮助将不胜感激
更新:
在我的mainservice中,我有一个启动该服务所有功能的函数,该函数为startSoftwareUpdates();
这些是我在MainService
中拥有的功能:
public MainService()
{
startSoftwareUpdates();
public void onDebug()
{
OnStart(null);
}
protected override void OnStart(string[] args)
{
startSoftwareUpdates();
}
更新3:
因此,我对MainService
进行了如下改组:
public MainService()
{
InitializeComponent();
}
public void onDebug()
{
OnStart(null);
}
protected override void OnStart(string[] args)
{
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
startSoftwareUpdates();
}).Start();
}
这种方法可能会导致什么问题?我也希望线程也无限运行...
答案 0 :(得分:2)
您的代码看起来没有什么错误。如果您可以在az webapp config connection-string set
构造函数中发布更多代码,那么考虑到问题所在可能会有所帮助。
但是,当我构建这些服务时,通常不执行MainService()
路由
#if DEBUG
很明显,我不希望这能解决您的问题,因为您上面发布的代码似乎以不同的方式做同样的事情。我发布此消息是为了给您提供一种不同的方式来完成您的上述操作。
如果我不得不猜测,我会说问题出在您的if (Environment.UserInteractive)
{
//**** this is for debugging in console mode
}
else
{
//*** this is for running as a Windows service
var ServicesToRun = new ServiceBase[]
{
new ServiceHome()
};
ServiceBase.Run(ServicesToRun);
}
构造函数中。
修改
我不认为问题出在您编写的任何代码上。您遇到的错误是由许多潜在问题引起的,因此很难准确地告诉您它是什么。 Here是一个链接,其中包含一些可供您尝试的解决方案。另外,假设您使用的是Windows计算机,则应尝试在MainService
中查找错误。大多数情况下,该问题会更加详细。