Description
As part of DAEMON-446 a regression was introduced that causes existing service DependsOn services to be removed when working with the //US option.
Replication:
Run:
prunsrv.exe //IS/MyService --Startup=auto --Description=MyService --DisplayName=MyService
sc config MyService depend=Tcpip/Afd/Dhcp
View the services and note that MyService depends on Dhcp (the sc config command is being used to represent a separate script call)
Now run:
prunsrv.exe //US/MyService --Startup=manual
View the services and note that MyService no longer depends on Dhcp
The offending code appears to be the following in service.c:
/* Add the mandatory dependencies */ if (lpDependencies) { lpDependencies = apxMultiSzCombine(NULL, lpDependencies, L"Tcpip\0Afd\0", NULL); } else { lpDependencies = L"Tcpip\0Afd\0"; }
Which means if DependsOn isn't defined we'll always pass down Tcpip and Afd, vs the NULL that happened before. Wiping existing custom dependancies out.
I didn't test it but this code may not work properly with the – vs ++ logic defined under https://commons.apache.org/proper/commons-daemon/procrun.html The DAEMON-446 ticket talks about --DependsOn (full replace) although I only see ++Depends on documented, so maybe DAEMON-446 was actually invalid to begin with?