安装新的Windows服务,无法启动:“系统错误2 …系统找不到指定的文件”

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

经过一段时间和惊愕之后,我能想到的唯一事情就是这个服务的显着不同之处在于path和可执行文件名至less比我的其他服务长10个字符。 缩短path和.exe名称并重新安装,服务运行正常:没有错误! 我只能假设我以前的path或服务或.exe名称太长。

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

我无法find任何与Windows相关的文档,以确认是否存在系统绑定字符限制的path或服务名称,我超过了。 如果时间允许,我会深入服务驱动程序,看看是否是问题所在。 同时我欢迎任何见解。

我尝试了一些测试服务,发现它不是导致我的问题(“系统错误2 …系统无法找到指定的文件”)的任何属性的长度。 我内置的服务安装程序使用三个属性:ServiceName,ServiceTitle,ServiceDescription。 在安装时,我发现它写入到注册表的完整服务路径,但它不只是采取实际的exe(程序集)名称,它使用ServiceName属性来建立路径! 我的问题是ServiceName和程序集名称不匹配,因此找不到文件。 我用PowerShell注册表查询来暴露路径,最后注意到从那里的不匹配。 当我第一次注意到这个问题的时候,我没有注意到,当我缩短了服务名称 – 我只是使用没有.exe的程序集名称,这实际上是修复它,而不是简单地缩短它。