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.