Ho *_* Ho 37 windows windows-services servicecontroller
我已成功安装了几个其他自定义.Net Windows服务.我最近编写的一个新版本与其他版本非常相似,并且安装时没有错误 - 在启动它时,服务控制器无法启动错误对话框:系统错误2 ...系统无法找到指定的文件.
经过一段时间和惊愕之后,我唯一想到的就是这个服务的唯一不同之处在于路径和可执行文件名称比我的其他任何服务都长至少10个字符.在缩短路径和.exe名称并重新安装时,服务运行良好:没有错误!我只能假设我以前的路径或服务或.exe名称太长.
另外,有必要提一下我使用了一些内置于我的exe中的"服务驱动程序"代码来处理通过win API调用向服务控制器安装/卸载服务.可能是该服务驱动程序模块中隐藏的字符限制.
我找不到任何与Windows相关的文档来确认是否存在我已超出的路径或服务名称的系统限制字符限制.我会在时间允许的情况下深入了解服务驱动程序,看看是否有问题.同时我欢迎任何见解.
Ho *_* Ho 44
我尝试了一些测试服务,发现它不是导致我的问题的任何属性的长度("系统错误2 ...系统找不到指定的文件")开始.我的内置服务安装程序使用三个属性:ServiceName,ServiceTitle,ServiceDescription.在安装时,我发现它将完整的服务路径写入注册表,但它不仅仅采用实际的exe(程序集)名称,它使用ServiceName属性来构建路径!我的问题是ServiceName和程序集名称不匹配,因此找不到文件.我使用了powershell注册表查询来公开路径,并最终注意到那里的不匹配.当我第一次注意到这个问题时,我没有注意到当我缩短服务名称时,我只是使用了程序集名称而没有使用.
我在服务中遇到了类似的问题,但遇到了同样的错误。
我去了:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ YourServiceName \ ImagePath
我的“ ImagePath”设置为存在于“ C:\”上的名为“ W:\”的虚拟驱动器。
我将此路径替换为C:\驱动器上的实际文件位置,然后该服务成功启动
就我而言,我打开命令提示符并导航到 exe 并从那里安装它。所以我没有输入完整路径。一旦我使用了完整路径,它就起作用了。
因此,您需要使用完整路径安装服务或将 exe 文件的路径添加到系统环境变量中的PATH中。
SC CREATE "Service-Name" binpath="D:\full-path-to-service\service.exe"
Run Code Online (Sandbox Code Playgroud)
或添加D:\full-path-to-service\
到 PATH 变量并使用
SC CREATE "Service-Name" binpath="service.exe"
Run Code Online (Sandbox Code Playgroud)