Форум: "WinAPI";
Текущий архив: 2008.06.15;
Скачать: [xml.tar.bz2];
ВнизЗапуск сервиса Найти похожие ветки
← →
Tonich © (2007-10-02 11:46) [0]Есть проблема с запуском сервиса. При его создании указывают имя сервиса от которого зависит мой сервис. а когда запускаю свой говорит что зависимый сервис либо отсутствует либо отмечен как удаляемый, хотя на самом деле он запущен и работает... кто-то сталкивался с таким?
← →
clickmaker © (2007-10-02 11:48) [1]
> Tonich © (02.10.07 11:46)
может, неправильно указал имя?
← →
Tonich © (2007-10-02 11:49) [2]вот только хотел дописать , ен успел, имя проверял уже не один раз
← →
Tonich © (2007-10-02 11:49) [3]а что самое интересно яж это делал а потом убрал, а теперь не получается вернуть обратно ..
← →
Tonich © (2007-10-02 11:50) [4]то есть проблема может быть только в неправильном имени, и ни в чем больше?
← →
Tonich © (2007-10-02 11:52) [5]а кстати там же если неправильно указать имя то в закладке сервиса (dependencies) не появится ни одного сервиса.. не так ли?
← →
Tonich © (2007-10-02 15:04) [6]так что кроме неправильного имени ничего не может быть?
← →
clickmaker © (2007-10-02 15:13) [7]
> так что кроме неправильного имени ничего не может быть?
"зависимый сервис либо отсутствует либо отмечен как удаляемый"
что за сервис-то, от которого зависит? Из стандартных?
← →
Tonich © (2007-10-02 15:19) [8]FireBird 1.5
← →
Tonich © (2007-10-02 15:20) [9]ну имя конечно у него другое, но это сервис этого сервера
← →
Tonich © (2007-10-02 16:23) [10]нашел ошибку, только не понятно, почему из-за нее не запускается сервер, у меня в таймере идет ежесекундно опрос состояния сервера, так вот если убрать это опрос, то все ставится и запускается корректно... чего так?
← →
Tonich © (2007-10-02 16:25) [11]то есть не сервера а сервиса
← →
Сергей М. © (2007-10-02 16:46) [12]
> в таймере идет ежесекундно опрос состояния сервиса
Показывай код ..
← →
Tonich © (2007-10-02 16:58) [13]правда написанно на бильдаре
// Service Status Structures _SERVICE_STATUS ServiceStatus;
void __fastcall TfrmHotel::TimerSvcStatusTimer(TObject *Sender)
{
try
{
try
{
ServiceStatus = GetServiceStatus();
}
__finally
{SetSatatusBarLine(sbServiceSts,GetServiceStatusDesc(ServiceStatus.dwCurrentStat e));}
}
catch(Exception &Ex)
{
return;
}
}
GetServiceStatus() в ней вызывается написанная на паскале уже function QueryStatus
function TbtSvcMan.QueryStatus(const Name: string; var SS: TServiceStatus): boolean;
var
hSvc : SC_HANDLE;
begin
Result := False;
if not Initialized then Exit;
hSvc := OpenService (hSCMan, PChar(Name), SERVICE_ALL_ACCESS);
if hSvc = 0 then Error("Can not access service: %s", [Name]);
Result := QueryServiceStatus(hSvc, SS);
CloseServiceHandle(hSvc);
end;
вот собсвенно и все..
← →
Сергей М. © (2007-10-03 08:22) [14]И с каким периодом тикает таймер ?
← →
Slym © (2007-10-03 08:31) [15]Tonich © (02.10.07 16:23) [10]
и зачем эта проверка? "зависимость" за тебя сама отработает (есле только не через таскман вырубать)
← →
Tonich © (2007-10-03 13:03) [16]
> Slym © (03.10.07 08:31) [15]
(есле только не через таскман вырубать)
вот именно для этого
> Сергей М. © (03.10.07 08:22) [14]
по разному ставил, начиная от 250 заканчивая 1000
но я решил уже эту проблему, она решается если выключать таймер когда сервис не зарегестрирован...
а можно другой вопрос в этой теме...
как выключить мой сервис первее всех, при выключении системы
пробовал SetProcessShutdownParameters(0x301,SHUTDOWN_NORETRY) не помогает
← →
Сергей М. © (2007-10-03 13:42) [17]
> как выключить мой сервис первее всех, при выключении системы
А с чем связана эта партизанщина ?
← →
Tonich © (2007-10-03 13:46) [18]
> Сергей М. © (03.10.07 13:42) [17]
с тем что мой сервис зависит от сервиса FireBird 1,5 и я хочу просто по выключению моего сервиса сохранить некоторые результаты в базе, ну а как вы понимаете у еня первым падает сервис FB, вот сот собственно с этим и связана эта партизанщина ))
← →
Сергей М. © (2007-10-03 13:55) [19]
> как вы понимаете у еня первым падает сервис FB
С какого перепугу он "выпадает" первым, если на него имеются референции со стороны твоего сервиса ?
← →
Tonich © (2007-10-03 13:58) [20]да вот собственно с этого ((
MSDN -http://msdn2.microsoft.com/en-us/library/ms685149.aspx
> Note that during service shutdown, the SCM does not take
> dependencies into consideration. The SCM enumerates the
> list of running services and sends the SERVICE_CONTROL_SHUTDOWN
> command. Therefore, a service may fail because another service
> it depends on has already stopped. To set the shutdown order
> of dependent services, use the SetProcessShutdownParameters
> function. The SCM uses this function to give its handler
> 0x1E0 priority. The SCM sends SERVICE_CONTROL_SHUTDOWN notifications
> when its control handler is called and waits for the services
> to exit before returning from its control handler.
← →
Tonich © (2007-10-04 21:47) [21]так что, насчет сервиса больше никто ничего не может подсказать ?
← →
Сергей М. © (2007-10-05 09:12) [22]
> Tonich © (04.10.07 21:47) [21]
Cудя по приведенной цитате из MSDN твой сервис после старта должен первым делом повысить свой шатдаун-приоритет до величины не меньшей чем у FB- процесса. Тогда система сначала будет "гасить" твой процесс и только потом FB-процесс.
← →
Tonich © (2007-10-05 10:37) [23]так я ж приводил кусочек кода
SetProcessShutdownParameters(0x301,SHUTDOWN_NORETRY)
вот что я делаю при старте сервиса
это же явно больше чем 0x1E0 который стоит у FB и тем ни менее...
← →
Сергей М. © (2007-10-05 10:43) [24]А функция эта у тебя действительно выполнилась успешно ?
← →
Tonich © (2007-10-05 10:45) [25]да, результат равен 1
← →
Сергей М. © (2007-10-05 11:39) [26]
> 0x1E0 который стоит у FB
Как узнал ?
← →
Tonich © (2007-10-05 12:05) [27]ну вообще-то вот от сюда
The SCM uses this function to give its handler
0x1E0 priority.
блин, ща проверю
← →
Сергей М. © (2007-10-05 12:16) [28]Как проверять собрался ?
Проще всего, думаю, будет сочинить простейшую UDF, в теле которой запросить шатдаун-приоритет тек.процесса.
← →
Tonich © (2007-10-05 12:18) [29]да че там сочинять
вначале запросить Get посмотреть что тм, потом дать Set и потом опять Get
← →
Сергей М. © (2007-10-05 12:23) [30]
> да че там сочинять
Как это "да че" ?!
Обе ф-ции имеют смысл в контексте текущего процесса !
← →
Tonich © (2007-10-05 12:59) [31]нет ну это понято )
← →
Tonich © (2007-10-05 13:05) [32]странно в процедуре старта сервиса меняю приорите
значить порядок действий
Get.....0x280 - ????????? должно же быть 0x1E0
Set.....0x301
Get.....0x301
а 0x280 это с таким приоритетом стартуют все процессы..
← →
Сергей М. © (2007-10-05 13:14) [33]Ну ты у FB посмотрел приоритет ?
← →
Tonich © (2007-10-05 13:19) [34]а вы имели ввиду у него посмотреть.. ) я думал у моего все теперь понял про UDF
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2008.06.15;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.023 c