Новая служба Windows установлена, не запускается: "Системная ошибка 2... система не может найти указанный файл" - программирование
Подтвердить что ты не робот

Новая служба Windows установлена, не запускается: "Системная ошибка 2... система не может найти указанный файл"

Я установил несколько других пользовательских сервисов Windows.Net. Новый, который я недавно написал, очень похож на другие, и при его установке без ошибок - при запуске его с помощью сервисного контроллера он не смог начать с диалогового окна с ошибкой: System error 2... system не может найти указанный файл.

По прошествии времени и ужаса, единственное, что я мог подумать об этом, было существенно отличным в отношении этой услуги, так это то, что имя пути и исполняемого файла было как минимум на 10 символов длиннее, чем любая другая моя служба. При сокращении имени пути и .exe и повторной установки сервис работает нормально: нет ошибки! Я могу только предположить, что мой предыдущий путь или служба или имя .exe было слишком длинным.

Кроме того, было бы уместно упомянуть, что я использовал какой-то заимствованный код "служебного драйвера", встроенный в мой exe, для обработки установки/удаления службы контроллеру службы через вызовы win API. Это ограничение может быть ограничено символом внутри этого модуля служебных драйверов.

Я не смог найти какие-либо документы, связанные с окнами, для подтверждения того, существует ли ограничение связанного с системой ограничения на путь или имя службы, которые я превысил. Я приеду к драйверу службы, когда позволит время, и посмотрим, окажется ли это проблемой. Тем временем я приветствую любые идеи.

4b9b3361

Ответ 1

Я экспериментировал с некоторыми тестовыми службами и обнаружил, что это не та часть какого-либо свойства, из-за которого моя проблема ( "Системная ошибка 2... система не может найти указанный файл" ) для начала. Мой встроенный сервис-инсталлятор использует три свойства: ServiceName, ServiceTitle, ServiceDescription. При установке я обнаружил, что он записывает полный путь к реестру, но он просто не принимает фактическое имя exe (assembly), он использует свойство ServiceName для построения пути! Моя проблема заключалась в том, что имя ServiceName и имя сборки не совпадали, поэтому файл не найден. Я использовал запрос реестра powershell, чтобы открыть путь и, наконец, заметил несоответствие оттуда. Когда я впервые заметил проблему, я не заметил, что когда я сократил имя службы из всего, что было, я просто использовал имя сборки без .exe, и это то, что на самом деле исправлено, а не просто сокращает ее.

Ответ 2

У меня была похожая проблема со службой, где я получал ту же ошибку.

Я пошел в:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\YourServiceName\ImagePath

Мой ImagePath был установлен на виртуальный диск с именем "W: \", который существует на "C: \".
Я заменил этот путь на фактическое расположение файла на диске C: \, а затем служба успешно запустилась

Ответ 3

Моя проблема заключалась в создании команды Service with Powershell с добавлением в таблицу реестров дополнительных команд: <C:\Path\To\Service\Service.exe>.

Replacing < and > with " fixed it for me.

Ответ 4

В моем случае я открыл командную строку и перешел к исполняемому файлу и установил его оттуда. Поэтому я не ввел полный путь. Как только я использовал полный путь, это сработало.

  1. Таким образом, вам нужно либо установить службу с полным путем, либо добавить путь к файлу exe к переменной PATH в системных переменных среды.

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

    или добавьте переменную D:\full-path-to-service\ to PATH и используйте

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


  1. Также убедитесь, что путь правильный. Потому что я однажды установил с неправильным путем, и он был успешно установлен, но когда я попытался запустить его, я получил ту же ошибку.

Ответ 5

У меня была та же проблема, ничего не решило эту ошибку, затем я решил, не используя путь c:\Windows\System32 для хранения исполняемого файла службы!