63

我已经成功安装了其他几个自定义的 .Net Windows 服务。我最近写的一个新的与其他的非常相似,虽然它安装没有错误 - 在使用服务控制器启动它时,它无法以错误对话框启动:系统错误 2 ...系统找不到指定的文件。

经过时间和惊愕之后,我唯一能想到的与此服务显着不同的是路径和可执行文件名称至少比我的任何其他服务长 10 个字符。在缩短路径和 .exe 名称并重新安装时,服务运行良好:没有错误!我只能假设我以前的路径或服务或 .exe 名称太长。

另外,值得一提的是,我使用了一些借用的内置到我的 exe 中的“服务驱动程序”代码来处理通过 win API 调用将服务安装/卸载到服务控制器。可能是该服务驱动程序模块中隐藏了字符限制。

我找不到任何与 Windows 相关的文档来确认我已超出的路径或服务名称是否存在系统绑定字符限制。当时间允许时,我会深入研究服务驱动程序,看看这是否是问题所在。同时,我欢迎任何见解。

4

7 回答 7

60

我尝试了一些测试服务,发现并不是任何属性的长度导致了我的问题(“系统错误 2 ... 系统找不到指定的文件”)。

我的内置服务安装程序使用三个属性:ServiceName、ServiceTitle、ServiceDescription。在安装时,我发现它写入了一个完整服务路径到注册表,但它不只是采用实际的exe(程序集)名称,它使用 ServiceName 属性来构建路径!

我的问题是 ServiceName 和程序集名称不匹配,因此找不到该文件。我使用 PowerShell 注册表查询来公开路径,最后从那里注意到不匹配。

当我第一次注意到这个问题时,我没有注意到当我缩短服务名称时——我只是使用了不带 .exe 的程序集名称,这就是实际修复它的原因,而不是简单地缩短它。

于 2013-11-07T19:56:32.693 回答
13

我在服务中遇到了类似的问题,我遇到了同样的错误。

我去了:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\YourServiceName\ImagePath

我的“ImagePath”被设置为一个名为“W:\”的虚拟驱动器,它存在于“C:\”上。
我将此路径替换为 C:\ 驱动器上的实际文件位置,然后服务成功启动

于 2018-11-19T09:21:16.363 回答
9

就我而言,我打开命令提示符并导航到 exe 并从那里安装它。所以我没有输入完整路径。一旦我使用了完整路径,它就起作用了。

  1. 因此,您需要使用完整路径安装服务将 exe 文件的路径添加到系统环境变量中的 PATH 中。

     SC CREATE "Service-Name" binpath="D:\full-path-to-service\service.exe"
    

    或添加D:\full-path-to-service\到 PATH 变量并使用

     SC CREATE "Service-Name" binpath="service.exe"
    

  1. 另外,验证路径是否正确。因为,我曾经用错误的路径安装并成功安装,但是当我尝试启动它时,我得到了同样的错误。
于 2019-06-03T09:39:23.100 回答
1

<C:\Path\To\Service\Service.exe>我的问题是,使用 Powershell 命令创建服务会在注册表中添加诸如:

Replacing < and > with " fixed it for me.
于 2018-01-17T11:07:59.183 回答
1

我有同样的问题,没有解决这个错误,然后我通过使用c:\Windows\System32路径来存储服务可执行文件来解决!

于 2019-06-28T13:27:23.687 回答
1

就我而言,问题是由服务启动例程中的错误引起的。DriverEntry(在我的情况下是内核模式驱动程序)返回错误的状态值。我认为这种情况也适用于用户模式。

于 2020-04-16T21:51:30.597 回答
0

sys文件被阻止的另一个可能原因。如果您的驱动程序没有明确退出(例如,您忘记清理设备、标注等),则 sys 文件可能被阻止。要检查您是否可以sys在服务不工作时尝试删除文件。通常你应该可以这样做。如果没有,驱动程序可能会占用一些资源,进而阻塞 sys 文件。

如果您的服务确实阻止了该文件,您应该将服务启动设置为手动(检查HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\YourServiceName\Start标志:0 - 启动时启动,3 - 手动)并重新启动您的设备。这将释放 sys 文件,您可以重试,直到修复清理流程。

于 2021-09-22T12:41:11.393 回答