Run batch file as a Windows service


Translate

In order to run one application, a batch file has to be kicked off (which does things like start Jetty, display live logs, etc). The application will work only if this batch file is running. I am hence forced to have this batch file running and not logout from the Windows server.

Can this batch file be run as a service? I am experimenting with one of the suggestions from a similar question.


All Answers
  • Translate

    NSSM is totally free and hyper-easy, running command prompt / terminal as administrator:

    nssm install "YourCoolServiceNameLabel"
    

    then a dialog will appear so you can choose where is the file you want to run.

    to uninstall

    nssm remove "YourCoolServiceNameLabel"
    

  • Translate

    Why not simply set it up as a Scheduled Task that is scheduled to run at start up?


  • Translate

    There's a built in windows cmd to do this: sc create. Not as fancy as nssm, but you don't have to download an additional piece of software.

    sc create "ServiceName" start= demand displayname= "DisplayName" binpath= [path to .bat file]
    

    Note

    • start=demand means you must start the service yourself
    • whitespace is required after =
    • I did encounter an error on service start that the service did not respond in a timely manner, but it was clear the service had run the .bat successfully. Haven't dug into this yet but this thread experienced the same thing and solved it using nssm to install the service.

  • Translate

    As Doug Currie says use RunAsService.

    From my past experience you must remember that the Service you generate will

    • have a completely different set of environment variables
    • have to be carefully inspected for rights/permissions issues
    • might cause havoc if it opens dialogs asking for any kind of input

    not sure if the last one still applies ... it was one big night mare in a project I worked on some time ago.


  • Translate

    While it is not free (but $39), FireDaemon has worked so well for me I have to recommend it. It will run your batch file but has loads of additional and very useful functionality such as scheduling, service up monitoring, GUI or XML based install of services, dependencies, environmental variables and log management.

    I started out using FireDaemon to launch JBoss application servers (run.bat) but shortly after realized that the richness of the FireDaemon configuration abilities allowed me to ditch the batch file and recreate the intent of its commands in the FireDaemon service definition.

    There's also a SUPER FireDaemon called Trinity which you might want to look at if you have a large number of Windows servers on which to manage this service (or technically, any service).


  • Translate

    No need for extra software. Use the task scheduler -> create task -> hidden. The checkbox for hidden is in the bottom left corner. Set the task to trigger on login (or whatever condition you like) and choose the task in the actions tab. Running it hidden ensures that the task runs silently in the background like a service.

    Note that you must also set the program to run "whether the user is logged in or not" or the program will still run in the foreground.


  • Translate

    AlwaysUp will easily run your batch file as a service. It is similar to FireDaemon (mentioned above) and isn't free, but you may find the rich feature set to be an asset in a professional environment.

    Good luck!