Opóźnienie w uruchamianiu usług blokuje dalsze usługi


(edmun) #1

Witam serdecznie

Na wstępie zaznaczam, że nie jestem użytkownikiem Windows 10 i nie będę, ale niestety trafiają się klienci którzy nieświadomie na Windows 10 przechodzą, co powoduje dużo utrudnień i zwiększoną ilość telefonów. Walczę jednak z jedną przypadłością Windowsa 10, jaką jest "zbyt duże obciążenie" systemu podczas startu co prowadzi do przeniesienia usług na dalszy plan.

Ale po kolei.

Posiadam 3 aplikację które korzystają z serwera SQL, w tym wypadku z SQLExpress.

Stąd też podczas uruchamiania systemu, w usługach systemowych powinien (tu właśnie jest problem), uruchomić się usługa SQLExpress a następnie 3 moje aplikacje (która także są w postaci usług). Przez jakiś czas otrzymywałem zgłoszenia że program nie uruchamia się i zazwyczaj po zdalnym zalogowaniu odnajdowałem że moje 3 usługi nie uruchomiły się gdyż usługa SQL Express też nie podniosła się na nogi ze względu na timeout.

Wg informacji ze stackexchange dodałem klucze do rejestru aby SQL jednak czekał nie 15-30 sekund ale 60 sekund przez wyrzuceniem timeout'a co sprawdza się na tyle dobrze, że na 20 uruchomień systemu, tylko raz znalazłem że SQL jednak nie wstał (lepsze to niż nic), ale jednak moje usługi po 30 sekundach widzą, że nie ma podłączenia do SQL więc również wywalają timeouty. I tu zaczyna się problem, bo o ile jestem w stanie napisać kilka prostych batchy żeby sprawdziły czy usługi są uruchomione a jeśli nie - to żeby po kolei je uruchomiły, ale w Windows 10 taki plik wsadowy nie będzie uruchomiony wraz z prawami administratora, przez co nie mam dostępu do usług jako normalny plik wsadowo/wykonywalny. Myślałem żeby to obejść za pomocą runas, ale wymagałoby to żeby użytkownik na miejscu wpisywał hasło administratora, a nawet jeśli użyję przełączniak savecred aby zapisać hasło na przyszłość, to z doświadczenia wiem że pociągnie to może z 2-4 tygodnie aby pewnego dnia dostać znowu telefon od klienta który wymyśli mi że on zainstalował aktualizację do Adobe Readera, zrestartował komputer a teraz nasz program się nie uruchamia i żąda znowu jakiś haseł. Oczywiście klient wręcz nakaże mi spojrzeć dlaczego Adobe Reader ma połączenie do naszego programu i za nic nie zda się tłumaczenie że to nie ma nic do rzeczy.

 

Podsumowując:

w jaki sposób w Windowsie 10 poradzić sobie z długo uruchamianymi usługami które wyrzucają po prostu błąd timeout, jeśli
a) ustawienie usługi na opóźnienie włączenie automatyczne nie jest rozwiązaniem
b) standardowy plik wsadowy aby te usługi sprawdzić czy działają i jeśli nie działają to uruchomić nie działa, bo plik wsadowy nie ma uprawnień administratora
c) nie mam niestety PowerShella i nie mam możliwości dogrania tego na systemie klienta bo takie coś będzie mnie kosztować przynajmniej rok przechodzenia przez biurokratyczną ścieżkę
d) nie mogę nakazać klientowi reinstalkę systemu z powrotem do siódemki, gdyż jest to "jego system" a nasz program :confused:

 

Jakieś pomysły? :confused:


(drunkula) #2

Znaczy zarabiasz na aplikacji, której nie potrafisz przystosować do działania na nowym systemie? Wypadałoby zapłacić komuś kto będzie to potrafił.

Bez info co to za aplikacja, jakie usługi, jakie wymagania itp to można gdybać co najwyżej.

 


(edmun) #3

Prosiłbym bez szufladkowania. Nie zarabiam na aplikacji gdyż jest to aplikacja która wspieram ale została wycofana z obiegu chyba z 10 lat temu i producent orzekł że wsparcia więcej nie będzie. Program ten miał nawet informacje ze na Windows 7 może nie działać tak jak powinien a co dopiero na Windows 10. I cóż poradzisz jak klient nie chce “innego programu” a wśród wsparcia które mu udzielasz to częścią tego wsparcia jest właśnie program którego “nie masz jak wspierać” ale klient nasz pan?  Usługi które się uruchamiają wymagają tylko żeby SQL działał bo aplikacja używa właśnie tej bazy. Więc proszę nie oceniaj ludzi, bo ja nie jestem ani twórca aplikacji, ani nawet oficjalnym wsparciem. Wspieram inny system ale niestety tak już bywa że czasami dostajesz coś gratis w “pakiecie” i powiesz klientowi co? Że ma wracać do siódemki? Albo że to nie nasza sprawa bo to “nie nasz produkt”?


(drunkula) #4

Rozumiem więc że świadczysz wsparcie darmowo? Gdzie można się zapisać? :wink:

Jeżeli coś nie jest oficjalnie nie wspierane, to zależnie od treści Twojej umowy z klientem, albo bujasz się z tym sam (i tu masz mały wybór: albo zatrudnić na dzieło kogoś kto to zmusi do działania, albo kary i wątpliwe przedłużenie kontraktu), albo podtykasz mu oficjalną informację EOL /EOS i musi się z tym pogodzić.

Tak czy siak - ta usługa SQL to jest lokalny serwer czy connector do jakiejś centralnej bazy? Jeżeli connector, to może warto poszukac alternatywnego lub zaktualizować skoro nie chce się uruchamiać. A jeżeli lokalna db, to jest odchudzona wersja SQL-Ex 2016 dla baz lokalnych. Kopiuj peceta do virtualki i sprawdź czy da się zmigrować i czy programowi bedzie odpowiadać.


(edmun) #5

Wytłumacze to tak.
Firma dla której pracuje wspiera około 300 stacji. Na 295 jest zainstalowane nasze oprogramowanie, ale żeby podpisać na te 295, musieliśmy się zgodzić że weźmiemy pod skrzydła tez pozostałe 5, które coś tam mają ale nie jest to nasze, ale że klient nie będzie płacił za wsparcie dwóm firmom (nam i komuś jeszcze) to woli płacić tylko nam i wygodniej też dla użytkowników że nie muszą dzwonić na 2 różne numery jak “coś złego się dzieje z komputerem”. Druga sprawa, ta “inna firma ze wsparciem” odwalała jakąś kompletną manianę i nasz klient i tak się cieszy że od nich odeszli.

Więc jest to “oferta wiązana”, czyli wsparcie dla produktu który zakończył żywot. I tak… możesz podetknąć mu informację pod nos, a za pół roku jak bedziesz miał kolejne przedłużenie kontraktu to nie zdziw się jak pieniądze jednak nie wpłyną na konto a papiery nie zostaną podpisane.

Czasami lepiej iść na ustępstwa i w biznesie nie jest zawsze jak w systemie binarnym że jest albo czarne albo białe i niestety takie czasy nastały, że trzeba być elastycznym. Nie moja firma - niby nie moja broszka, ale jako technik który wspieta te 295 komputerów bez problemów, bo są też przez nas zarządzane, tak te ostatnie 5 nie stwarzają nam żadnych problemów bo dokumentacja jest bardzo dokładna, a sam program nigdy nie robił żadnych problemów (jakaś księgowość z tego co czasami widzę na ekranie). 

Ale jak już wspomiałem, pech chciał że któraś pani Zosia czy Maria dostała Windowsa 10 w prezencie od Microsoftu, ja winnego szukać nie będę (bo któryś z serwisantów zawalił sprawę jeśli chodzi o pilnowanie aktualizacji) bo to tylko strata czasu, a nie mogę też klientowi powiedzieć, żeby “nie wyłaczał ani nie resetował komputera bo będzie musiał ręcznie uruchamiać usługi w services.msc”… 

Wiesz - taka sytuacja z którą po prostu musisz się pogodzić i w wolnym czasie jak nie ma innych zgłoszeń, to siadasz i kombinujesz jak tu coś zrobić, żeby apka z 2002 czy 2004 roku jednak działała na Windowsie 10.

 

Wracając do usług.

Zasada działania nie jest skomplikowana, nawet mogę to uprościć bo żeby tak naprawdę cały ten księgowy system działał, to wystarczy żeby Windows uruchomił:

SQLServer (SQLExpress) z lokalną bazą

oraz usługę CentralService która jest po prostu plikiem wykonywalnym który podłącza się pod tą bazę SQLExpress

Nic więcej… 

I że Windows 10 lubi się uruchamiać “szybko” to zostawia usługi w tle (podpowiem że zmiana priorytetów z programów na usługi działające w tle nie rozwiązuje problemu) i te usługi uruchamiają się trochę później niż zwykle.

SQLExpress stwarzał problemy za pomocą błędu:
 

Ale jak wspomniałem wcześniej, zmiana w rejestrze rozwiązuje problem i serwer “powstaje” za każdym razem ale “Central Server” jest przecież też ustawiony na uruchamianie automatyczne, więc kiedy CentralServer stara się załączyć i podłączyć pod bazę SQL, ta baza nie jest jeszcze uruchomiona.

Wciąż przeszukuję pliki konfiguracyjne tego systemu księgowego, czy można gdzieś ustawić pewnego rodzaju opóźnienie, ale jest to jak szukanie igły w stogu siana, bo pomimo dokumentacji, to nikt się nie spodziewał, że trzeba będzie coś takiego zrobić. Oczywiście jest jedna wzmianka, że można napisać plik wsadowy który to wszystko opóźni i ręcznie będzie monitorować usługi, ale Windows 10 nie za bardzo mi na to pozwala.

 


(drunkula) #6

Expressem się nie zajmowałem, ale komunikat o przekroczeniu czasu jest dość generyczny, więcej info powinno być w error logu.

30000ms to default, może daj mu chwilę dłużej na negocjację połączenia:
https://biatlink.wordpress.com/2013/04/29/sql-server-request-failed-or-the-service-did-not-respond-in-a-timely-fashion/

A jak to zadziała, to już sam program księgowy też z opóźnieniem, nawet bez sprawdzania czy usługa działa - ważne żeby się uruchomiło. A że dłużej to już Pani Basia z Krysią z księgowości jakoś muszą przeboleć, skoro zachciało się Win 10.


(edmun) #7

drunkula ale ja już wspominałem że SQLExpress nie mam problemu bo właśnie to rozwiązałem. Problem że usługa “Central Server” nawet opóźniona, włącza się za szybko :slight_smile:


(lucas80) #8

Skoro tak, to ustaw ją na uruchamianie manualne i dodaj zadanie do harmonogramu zadań, które uruchomi tą usługę po zadanym czasie np. tak:

schtasks /create /tn “Uruchom usługę potem” /tr “net start “Central Server”” /sc onstart /RL highest /DELAY 0003:00