It might take a few tries to get create services just right
Last month, in "The All-Purpose Service Controller" (InstantDoc ID 93400), I gave you a taste of SC (sc.exe), the powerful Windows command-line tool for controlling services. This month, let's take a crack at just one of SC's subcommands—the one that lets you create new services. In the process, we'll gather some details about how services work that you might not know.
sc create Webimagemailer binpath= C:\wc\wcmail.exe
to which SC would respond with the terse message \[SC\] CreateService SUCCESS.
This command accomplishes several tasks. First, it creates a subkey in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services called Webimagemailer. Inside that subkey, SC creates further subkeys named Enum and Security—subkeys that most services have. Inside these subkeys are a number of configuration options that SC sets, but you'll have the opportunity to fine-tune them later. One of these options, ImagePath, contains the service's location, which we fed to SC through the binpath= parameter. (SC is strange about its parameters, in this case requiring a space between the equals sign and the parameter.)
Investigating the Microsoft Management Console (MMC) Services snap-in reveals that you now have a service called Webimagemailer—a manual startup service running under the LocalSystem account. You could have used the start= parameter—which takes boot, system, auto, demand (the SC phrase for manual startup,) or disabled—to configure the startup setting. Similarly, you could have used the obj= username parameter to control the account under which SC runs. Also, you might be very security conscious and not want a service that you don't know very well running under the Local-System account, so you could craft an account called, say, webcamguy with a password of swordfish and just the permissions it needs to let wcmail.exe get the job done—but no more. And while you're at it, the name Webimagemailer looks a bit ungainly in the Services snap-in. By using the displayname= "descriptive name" option, you can make it look more attractive in the list of services.
sc delete Webimagemailer
That command marks the service for deletion; you'll have to reboot for it to take effect. Now, you can add your new startup type, service account, and display name:
Remember to leave that space after the equals sign, or you'll find SC infuriating.
You can use the error= parameter to do that. Windows watches how services start up, and you can configure the OS's response to failed startups in four ways: normal, the default option, displays the message and starts Windows normally; ignore, the option you want, just puts a note in the event log; severe recognizes the importance of the service or driver and triggers the OS to reboot to the Last Known Good configuration; and critical triggers Windows to reboot to the Last Known Good configuration but to bluescreen the system if the driver or service still won't load.
So, delete the service, reboot, add the error= ignore parameter, and everything should be fine—at least, until you realize that you need to work out a certain dependency problem. But that's fodder for next month's column.