My installer creates services with the following command in Inno Setup:
Filename: {sys}\sc.exe; Check: IsAdminLoggedOn; Parameters: "create Example start= delayed-auto binPath= ""{app}\Example.exe"""; Flags: runhidden
This line works in all Windows besides Windows XP because the delayed-auto
startup type is not supported in Windows XP.
I need to use the delayed-auto
startup type for two reasons.
- My service needs to always run on the background without user intervention, which means that the service must automatically start on boot.
- My service depends on other basic windows services and cannot run without them, therefor I use the
delayed-auto
to start only after all the basic services are up.
So can I create a service on Windows XP that has a startup type similar to that of delayed-auto
and if not then what are the alternatives?
Try creating a scheduled task that starts when the system comes up. The scheduled task can depend on a network connection being present. You can also (if that is not available to you) use the command line script to do a ping against a network device and check the response prior to starting the service which you created as a "manual" start. This should avoid the crash due to resources not being available. ]<
The
delayed-auto
startup type is not intended to resolve dependency between services. What if the services you depend on also haddelayed-auto
startup type? Thedelayed-auto
startup type is intended to speed up the computer start by delaying the non-essential services.See What does “delayed start” do in startup type for a Windows service?
To set dependencies between services, use
depend=
option.If you still want to use
delayed-auto
on Windows Vista and newer (what is recommended), just create two[Run]
entries, one for Windows XP and one for Windows Vista (Windows version 6.0) and newer.See also Execute different command in Inno Setup Run section based on Windows version.
A better, though a little more complicated solution, is using a scripted constant. It reduces code duplication.