I've written a Windows Service in C# that basically checks my db every minute for orders, generates a PDF from these orders, and emails it.
The logic works perfectly in my tests etc..
When i create the service, and install it using the setup project, when I go to start the service in the services mmc, I get:
error 1053 the service did not respond to the start or control request in a timely fashion
My OnStart method looks like this:
protected override void OnStart(string[] args) { //writeToWindowsEventLog("Service started", EventLogEntryType.Information); timer.Enabled = true; }
Basically, just enables the timer... so theres no process intensive call there.
Where am I going wrong?
I've tried setting the startup account to local system, network service etc... nothing works!
Edit:
Here is my code: (processPurchaseOrders is the method where the db is queried and pdf's are generated etc...)
public partial class PurchaseOrderDispatcher : ServiceBase { //this is the main timer of the service private System.Timers.Timer timer; public PurchaseOrderDispatcher() { InitializeComponent(); } // The main entry point for the process static void Main() { #if (!DEBUG) ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new PurchaseOrderDispatcher() }; ServiceBase.Run(ServicesToRun); #else //debug code PurchaseOrderDispatcher service = new PurchaseOrderDispatcher(); service.processPurchaseOrders(); #endif } private void InitializeComponent() { this.CanPauseAndContinue = true; this.ServiceName = "Crocus_PurchaseOrderGenerator"; } private void InitTimer() { timer = new System.Timers.Timer(); //wire up the timer event timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); //set timer interval var timeInSeconds = Convert.ToInt32(ConfigurationManager.AppSettings["TimerIntervalInSeconds"]); timer.Interval = (timeInSeconds * 1000); // timer.Interval is in milliseconds, so times above by 1000 timer.Enabled = true; } protected override void Dispose(bool disposing) { if (disposing && (components != null)) components.Dispose(); base.Dispose(disposing); } protected override void OnStart(string[] args) { //instantiate timer Thread t = new Thread(new ThreadStart(this.InitTimer)); t.Start(); } protected override void OnStop() { //turn off the timer. timer.Enabled = false; } protected override void OnPause() { timer.Enabled = false; base.OnPause(); } protected override void OnContinue() { timer.Enabled = true; base.OnContinue(); } protected void timer_Elapsed(object sender, ElapsedEventArgs e) { processPurchaseOrders(); } }
1] Modify timeout settings via Windows Registry If an application happens not to respond within this time duration, Error 1503 will pop up. However, you can tweak these settings via registry to allow more time for applications to load on your computer. Here is how to do so: Press Windows+ R to open Run Command Box.
I just had the same problem.
It turned out it was because I was running it as a console in debug mode - like the code you have above
#if (!DEBUG) #else //debug code #endif
And I had compiled it in debug mode and installed the service
When I compiled it in release mode it worked as expected
Hope this helps
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With