Search code examples
c#windowsserviceinstallutil

InstallUtil gets stuck while installing service


I'm trying to install my own windows service using installUtil.exe with the following command in Administrator mode.

InstallUtil C:\Users\Admin\Desktop\Subway_sync\SubwaySync\SubwaySync\bin\Debug\SyncSQL.exe

I get the following as cmd output and installation is stuck at right there.

-----------------------------------  Installing Service.
Microsoft (R) .NET Framework Installation utility Version 4.7.2046.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Running a transacted installation.

Beginning the Install phase of the installation.
See the contents of the log file for the C:\Users\Admin\Desktop\Subway_sync\SubwaySync\SubwaySync\bin\Debug\SyncSQL.exe assembly's progress.
The file is located at C:\Users\Admin\Desktop\Subway_sync\SubwaySync\SubwaySync\bin\Debug\SyncSQL.InstallLog.
Installing assembly 'C:\Users\Admin\Desktop\Subway_sync\SubwaySync\SubwaySync\bin\Debug\SyncSQL.exe'.
Affected parameters are:
   logtoconsole =
   logfile = C:\Users\Admin\Desktop\Subway_sync\SubwaySync\SubwaySync\bin\Debug\SyncSQL.InstallLog
   assemblypath = C:\Users\Admin\Desktop\Subway_sync\SubwaySync\SubwaySync\bin\Debug\SyncSQL.exe

The service is showing neither in the Services viewer nor in CLI when issued net start as an installed service.

Following is the installer and service class code.

using System.ComponentModel;
using System.ServiceProcess;

namespace SubwaySync
{
    [RunInstaller(true)]
    public partial class Installer : System.Configuration.Install.Installer
    {
        private ServiceInstaller serviceInstaller;
        private ServiceProcessInstaller processInstaller;

        public Installer()
        {
            // Instantiate installers for process and services.
            processInstaller = new ServiceProcessInstaller();
            serviceInstaller = new ServiceInstaller();

            // The services run under the system account.
            processInstaller.Account = ServiceAccount.LocalSystem;

            // The services are started manually.
            serviceInstaller.StartType = ServiceStartMode.Automatic;

            // ServiceName must equal those on ServiceBase derived classes.
            serviceInstaller.ServiceName = "SyncSQL";

            // Add installers to collection.
            Installers.Add(serviceInstaller);
            Installers.Add(processInstaller);
            InitializeComponent();
        }
    }

    public partial class SubwaySync : ServiceBase
    {
        EventLog e = new EventLog();
        private System.Timers.Timer _timer;

        public SubwaySync()
        {
            InitializeComponent();

            if (!System.Diagnostics.EventLog.SourceExists("DoDyLogSourse"))
                System.Diagnostics.EventLog.CreateEventSource("DoDyLogSourse", "DoDyLog");

            e.Source = "DoDyLogSourse";
            // the event log source by which 
            //the application is registered on the computer

            e.Log = "DoDyLog";
            Thread.Sleep(60001);
        }
        protected override void OnStart(string[] args)
        {
            _timer = new System.Timers.Timer(TimeSpan.FromMinutes(1).TotalMilliseconds);  // 10 minutes expressed as milliseconds
            _timer.Elapsed += new ElapsedEventHandler(OnTimerElapsed);
            _timer.AutoReset = true;
            _timer.Start();
        }

        protected override void OnStop()
        {
            _timer.Stop();
            _timer.Dispose();
        }

        private void OnTimerElapsed(object sender, ElapsedEventArgs e)
        {
            // Do your work here...
        }
    }
}

Solution

  • Thread.Sleep(60001);
    

    This line in service class (SubwaySync) caused the delay.