Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

New Windows Service installed, fails to start: "System error 2 ... system cannot find the file specified"

I have installed several other custom .Net windows services successfully. A new one I had recently written was very similar to the others and while it installed without error - on starting it with the service controller it failed to start with the error dialog: System error 2 ... system cannot find the file specified.

After time and consternation, the only thing I could think of that was significantly different about this service was that the path and executable name were at least 10 characters longer than any of my other services. On shortening both the path and .exe name and re-installing, the service ran fine: no error! I can only assume my previous path or service or .exe name was too long.

Also, It would be pertinent to mention I had used some borrowed "service driver" code built in to my exe to handle the install/uninstall of the service to the service controller via win API calls. It could be a character limit was hidden within that service driver module.

I could not find any windows related docs to confirm if there is a system bound character limit to a path or service name that I had exceeded. I will dig in to the service driver when time permits and see if that turns out to be the problem. Meanwhile I welcome any insights.

like image 241
Ho Ho Ho Avatar asked Nov 05 '13 21:11

Ho Ho Ho


People also ask

How do you fix the system Cannot find the file specified error?

Use SFC to fix system cannot finds the file specified error. In Command Prompt, type the following command: “sfc /scannow”. Now press Enter. After scanning and correcting errors, restart the computer and check if the “system cannot find the file specified” error is fixed.

Where are services installed Windows?

The Services file is typically located in %windir%\System32\drivers\etc\services. If the file is missing, check with your system administrator before starting the database server installation process.


2 Answers

I experimented with some test services and found it was not the length of any property that caused my problem (“System error 2 ... system cannot find the file specified”) to begin with.

My built-in service installer uses three properties: ServiceName, ServiceTitle, ServiceDescription. On installing, I found that it writes a full-service path to the registry, but it doesn’t just take the actual exe (assembly) name, it uses the ServiceName property to build the path!

My issue was that the ServiceName and assembly name didn’t match, hence the file was not found. I used a PowerShell registry query to expose the path and finally noticed the mismatch from there.

When I first noticed the problem I had not noticed that when I shortened the service name from whatever it was – I just used the assembly name without the .exe and that is what actually fixed it, not simply shortening it.

like image 97
Ho Ho Ho Avatar answered Sep 18 '22 22:09

Ho Ho Ho


I had a similar issue with a service, where I was getting the same error.

I went to:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\YourServiceName\ImagePath

My 'ImagePath' was set to a virtual drive called "W:\" that exists on "C:\".
I replaced this path with the actual file location on the C:\ drive and then the service started successfully

like image 42
jasttim Avatar answered Sep 21 '22 22:09

jasttim