windows - 安装了新的 Windows 服务,无法启动 : "System error 2 ... system cannot find the file specified"

标签 windows windows-services servicecontroller

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

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

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

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

最佳答案

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

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

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

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

关于windows - 安装了新的 Windows 服务,无法启动 : "System error 2 ... system cannot find the file specified",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19799669/

相关文章:

c# - ExecuteCommand servicecontroller - 无法对服务执行命令

windows-services - ServiceController似乎无法停止服务

c# - ServiceController.WaitForStatus 是设置状态还是只是等待?

windows - 如何调试无响应的Grails应用程序?

android - Nativescript Sidekick错误: Cannot find suitable v8 version! Android云构建

c# - Windows 服务一般问题

c# - 已添加项目。安装 Windows 服务时出错

windows - Vagrant 错误 : Unable to Mount VirtualBox Shared Folders (Guest Additions, vboxsf)

c# - LoadLibrary 内的访问冲突

windows-7 - Redis 服务不会在 Windows 上启动