There is no limitation that services cannot access files. There must be something else different between your service and your standalone .exe.

If you were getting ERROR_ACCESS_DENIED (5) instead of ERROR_FILE_NOT_FOUND (2) I would suspect a permissions issue, but this seems to be a case of trying to open a device that isn't there.