Zainstalowano nową usługę systemu Windows, nie można uruchomić: „błąd systemu 2 ... system nie może znaleźć określonego pliku”


Z powodzeniem zainstalowałem kilka innych niestandardowych usług systemu Windows .Net. Nowa, którą niedawno napisałem, była bardzo podobna do pozostałych i chociaż została zainstalowana bez błędów - po uruchomieniu kontrolera serwisowego nie można było uruchomić z okna dialogowego błędu: Błąd systemowy 2 ... system nie może znaleźć określonego pliku .
Po długim czasie i horrorze jedyne, o czym mogłem pomyśleć, różniło się znacznie od tej usługi, to fakt, że ścieżka i nazwa pliku wykonywalnego były co najmniej 10 znaków dłuższe niż w przypadku innych moich usług. Po skróceniu ścieżki i nazwy pliku .exe oraz ponownej instalacji usługa działała poprawnie: żadnych błędów! Mogę tylko założyć, że moja poprzednia ścieżka, nazwa usługi lub nazwa .exe była za długa.
Warto również wspomnieć, że użyłem pożyczonego kodu „sterownika usługi” wbudowanego w mój exe do obsługi instalacji/deinstalacji usługi w kontrolerze usług za pośrednictwem wywołań API win. Może to być ograniczenie znaków ukryte w tym module sterownika usługi.
Nie mogłem znaleźć żadnych dokumentów związanych z systemem Windows, aby potwierdzić, czy istnieje limit znaków systemowych dla ścieżki lub nazwy usługi, które przekroczyłem. Zagłębię się w sterownik serwisowy, gdy czas na to pozwoli i zobaczę, czy okaże się to problemem. W międzyczasie z zadowoleniem przyjmuję każdy wgląd.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Poeksperymentowałem z niektórymi usługami testowymi i stwierdziłem, że mój problem nie był spowodowany długością żadnej właściwości („błąd systemowy 2 ... system nie może znaleźć określonego pliku”). Mój wbudowany instalator usługi używa trzech właściwości: ServiceName, ServiceTitle, ServiceDescription. Podczas instalacji stwierdziłem, że zapisuje pełną ścieżkę usługi do rejestru, ale nie akceptuje tylko rzeczywistej nazwy exe (zestawu), ale używa właściwości ServiceName do budowania ścieżki! Mój problem polegał na tym, że nazwa usługi i zestaw nie pasowały, więc plik nie został znaleziony. Użyłem zapytania rejestru PowerShell, aby otworzyć ścieżkę i wreszcie zauważyłem rozbieżność. Kiedy pierwszy raz zauważyłem ten problem, nie zauważyłem, że kiedy skróciłem nazwę usługi z tego, co to było - że po prostu użyłem nazwy zestawu bez .exe i to właśnie go naprawiło, a nie tylko skróciłem.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Miałem podobny problem z usługą, w której otrzymywałem ten sam błąd.
Poszłam do:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\YourServiceName\ImagePath

Moja ścieżka „ImagePath” została zainstalowana na dysku wirtualnym o nazwie „W: \”, który znajduje się w folderze „C: \”.

Zastąpiłem tę ścieżkę rzeczywistą lokalizacją pliku na dysku C: \ i usługa została uruchomiona pomyślnie
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W moim przypadku otworzyłem polecenie Promt, przeszedłem do exe i zainstalowałem go stamtąd. Dlatego nie wybrałem pełnej ścieżki. Kiedy wykorzystałem pełną ścieżkę, zadziałało.
  • Musisz więc albo zainstalować usługę z pełną ścieżką, albo dodać ścieżkę do pliku exe do PATH w systemowych zmiennych środowiskowych.
    SC CREATE "Service-Name" binpath="D:\full-path-to-service\service.exe"
    lub dodaj
    D: \ full-path-to-service \
    do zmiennej PATH i użyj
    SC CREATE "Service-Name" binpath="service.exe"
<ol start="2">
[*]
Upewnij się również, że ścieżka jest poprawna. Ponieważ raz zainstalowałem go z niewłaściwą ścieżką i został pomyślnie zainstalowany, ale kiedy próbowałem go uruchomić, dostałem ten sam błąd.
[/*]
[/list]
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Mój problem polegał na tym, że podczas tworzenia usługi za pomocą polecenia Powershell do rejestru zostały dodane nawiasy takie jak
& < C: \ Path \ To \ Service \ Service.exe & >
.
Replacing < and > with " fixed it for me.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Miałem ten sam problem, nic nie rozwiązało tego błędu a potem go rozwiązałem,

nie

używając ścieżki
c: \ Windows \ System32
do przechowywania pliku wykonywalnego usługi!
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W moim przypadku przyczyną problemu był błąd w procedurze uruchamiania serwisu. DriverEntry (w moim przypadku był to sterownik trybu jądra) zwraca nieprawidłową wartość statusu. Myślę, że ta sytuacja dotyczy również trybu użytkownika.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się