Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
已安装新的Windows服务,无法启动:";系统错误2。。。系统找不到指定的文件";_Windows_Windows Services_Servicecontroller - Fatal编程技术网

已安装新的Windows服务,无法启动:";系统错误2。。。系统找不到指定的文件";

已安装新的Windows服务,无法启动:";系统错误2。。。系统找不到指定的文件";,windows,windows-services,servicecontroller,Windows,Windows Services,Servicecontroller,我已成功安装了其他几个自定义.Net windows服务。我最近写的一个新版本与其他版本非常相似,虽然安装时没有出现错误-在使用服务控制器启动时,它无法启动错误对话框:系统错误2。。。系统找不到指定的文件 经过时间和惊愕之后,我能想到的唯一一件与此服务显著不同的事情是路径和可执行文件名至少比我的任何其他服务长10个字符。缩短路径和.exe名称并重新安装后,服务运行良好:无错误!我只能假设我以前的路径、服务或.exe名称太长 另外,值得一提的是,我使用了一些内置于exe中的借用的“服务驱动程序”代

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

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

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


我找不到任何与windows相关的文档,无法确认路径或服务名称是否超出了系统绑定字符限制。如果时间允许,我会深入询问服务司机,看看这是否是问题所在。同时,我欢迎任何见解

我对一些测试服务进行了试验,发现问题的根源不是任何属性的长度(“系统错误2…系统找不到指定的文件”)。我的内置服务安装程序使用三个属性:ServiceName、ServiceTitle和ServiceDescription。在安装时,我发现它将完整服务路径写入注册表,但它不仅采用实际的exe(程序集)名称,还使用ServiceName属性构建路径!我的问题是ServiceName和程序集名称不匹配,因此找不到文件。我使用了powershell注册表查询来公开路径,最后注意到路径不匹配。当我第一次注意到这个问题时,我没有注意到,当我将服务名称从原来的名称中缩短时,我只是使用了没有.exe的程序集名称,这实际上是修复它的原因,而不是简单地缩短它。

我的问题是,使用Powershell命令创建服务时,在注册表中添加了类似于:
的brakets

Replacing < and > with " fixed it for me.
替换为“为我修复了它”。

我在一项服务中遇到了类似的问题,我遇到了相同的错误

我去了:

HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\YourServiceName\ImagePath

我的“ImagePath”被设置为一个名为“W:\”的虚拟驱动器,该虚拟驱动器存在于“C:\”上

我将此路径替换为C:\驱动器上的实际文件位置,然后服务成功启动

在我的情况下,我打开命令Promt并导航到exe并从那里安装。因此我没有输入完整路径。一旦使用完整路径,它就起作用了

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

     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"
    

  • 另外,请验证路径是否正确。因为,我曾经使用错误的路径安装,但它安装成功,但当我尝试启动它时,我遇到了相同的错误

  • 我也遇到了同样的问题,没有任何东西可以解决这个错误,然后我通过使用
    c:\Windows\System32
    路径存储服务可执行文件来解决这个问题!

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

    在缩短路径之前,路径的总长度是多少。您的路径是否有任何不寻常的字符?如果您还可以提供用于帮助尝试回答您的问题的任何人的初始路径,则工作服务现在的可执行名称长度为17.不幸的是,我没有保存旧的,但它接近30或35个字符。服务名称(服务控制器名称)是相同的(没有.exe扩展名)服务控制器中显示的服务标题约为40-50个字符。exe的总本地完整路径约为100个字符,现在它正在工作,路径为67个字符。我可以编写一些测试项目并更改长度以检查失败。主要是想知道是否有一些已知的文档限制。它的difF无法在不知道确切路径长度或初始设置方式的情况下提供帮助。仅供参考,此类问题应发布在powershell注册表查询中。路径可在
    HKEY\U LOCAL\u MACHINE\SYSTEM\CurrentControlSet\Services\YourServiceName\ImagePath
    中找到。先生,在我的情况下,我设置了命令提示到EXE文件夹,因此,ImagePath具有.EXE,但没有任何路径信息=(我有完全相同的问题,10倍。我正在使用sc命令安装我的,也有同样的问题。在阅读了所有信息后,我所要做的就是提供EXE的完全限定路径,它现在立即启动!谢谢Zac,我试图在cmd中设置路径,以管理员身份打开,但它不起作用。但是当我重新登录到服务器时作为管理员,我能够创建并启动服务