Проблемы с запуском проги как Service и NTSVC.ocx

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
stallion
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.06.2005 (Чт) 13:36

Проблемы с запуском проги как Service и NTSVC.ocx

Сообщение stallion » 29.06.2005 (Ср) 10:00

в общем вставил библиотеку и код как написано в msdn . запуск , останов , пауза . всё работает . есть только 2 проблемы по которым я что то не пойму в чём дело :
1. в апликейшн лог валится каждую секудну сообщение

Не найдено описание для события с кодом ( 1 ) в источнике ( 1C_Robot ). Возможно, на локальном компьютере нет нужных данных в реестре или файлов DLL сообщений для отображения сообщений удаленного компьютера. Попробуйте использовать ключ /AUXSOURCE= для получения этого описания, - дополнительные сведения об этом содержатся в справке. В записи события содержится следующая информация: [0] .

и 2 . когда всё стартует на серваке и заходишь под терминал сервисом почему то не видно запущенного приложения в трее . (хотя я думаю потому что запускается сервис от имени того кто залогинился . ) тогда вопрос как сделать его системным ?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 29.06.2005 (Ср) 10:33

сервис не должен взаимодействовать с рабочим столом напрямую...
это нарушение безопасности.

Используй другой ехе , который будет работать на раб столе пользователя и взаимодействовать с твоей службой
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

stallion
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.06.2005 (Чт) 13:36

Сообщение stallion » 29.06.2005 (Ср) 10:53

А шде можно посмотреть пример описания взаимодействия exe сервиса и exe для работы с пользователями (на основе NTSVC.ocx)?
как я понимаю надо будет чтобы exe отвечал на команды сервиса . а в сервисе было описано что и откуда запускать .

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 29.06.2005 (Ср) 11:16

можно по TCP, Pipes. Или ДКОМ.
А протокол обмена сам думай.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

stallion
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.06.2005 (Чт) 13:36

Сообщение stallion » 29.06.2005 (Ср) 11:23

что то я не пойму . всё что мне нужно это просто чтобы приложение запускалось само . это автоматический обмен почтой с филиалами . максимум что там есть это кнопка ручной отправки . спрашивается можно ли как нибудь превратить всё это в сервис ? без написания протокола обмена данными . между файлами . то есть запустилась система - запустилось приложение - оно висит в трее . всё . или максимум что можно это поубирать оттуда все интерфейсы ,сделать вывод в eventlog при событиях ?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 29.06.2005 (Ср) 11:38

Обьъясни требования к приложению, нужно ли ему иметь интерфейс?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

stallion
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.06.2005 (Чт) 13:36

Сообщение stallion » 29.06.2005 (Ср) 12:00

иметь интерфейс желательно . чтобы не лезть в логи для того чтобы посмотреть какие письма ушли . а также для того чтобы отправить письма вручную (так там установлен обмен почтой через заданный интервал времени)

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 29.06.2005 (Ср) 13:29

это уже не сервис будет, а просто обычная прога, которая в трее у тебя будет висеть и все, что тебе надо, делать в фоновом режиме

stallion
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.06.2005 (Чт) 13:36

Сообщение stallion » 29.06.2005 (Ср) 13:36

1. необходимо чтобы прога запускалась до того как логинишься в сервак .
2. чтобы если я захожу на сервак терминалом я мог смотреть на фейс этой проги и видеть что куда ушло (там это высвечивается) .

3. может можно использовать srvany.exe .

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 29.06.2005 (Ср) 13:59

Ты не сможешь из приложения ЗАПУЩЕННОГО РАНЬШЕ ЛОГОН-СЕССИИ получить доступ к её рабочему столу! тоесть оно будет видно только при ЛОКАЛЬНОМ входе, но кнопки нажиматься не будут))))
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

stallion
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.06.2005 (Чт) 13:36

Сообщение stallion » 29.06.2005 (Ср) 14:09

значит как я понял надо написать сервис , и всё что он делает выводить в eventlog . никаких форм и кнопок . вот гимор !

stallion
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.06.2005 (Чт) 13:36

Сообщение stallion » 29.06.2005 (Ср) 15:17

вопрос . как написать приложение в котором нет ни 1 формы ? сервис и таймеры то надо добавлять куда то ? может проект по другому должен быть создан ?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 29.06.2005 (Ср) 15:23

формы то могут быть, тока не рассчитывай на интерактивность..

Ну вообщето, таймер можно добавить.... WithEvents
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 29.06.2005 (Ср) 15:24

Unattended Execution в свойствах проекта, а таймер тебе зачем?
в процедуре Main просто цикл определяй и все дела:

Код: Выделить всё
    If IsNTService Then
        ' ******************
        ' Here you may initialize and start service's objects
        ' These objects must be event-driven and must return control
        ' immediately after starting.
        ' ******************
        If Service_Initialize(ServiceName) = 0 Then
          SetServiceState SERVICE_RUNNING
          Do
              ' ******************
              ' It is main service loop. Here you may place statements
              ' which perform useful functionality of this service.
              ' ******************
              ' Loop repeats every second. You may change this interval.
            Interval = Service_Loop()
          Loop While MsgWaitObj(Interval, hStopPendingEvent, 1&) = WAIT_TIMEOUT
        End If
        ' ******************
        ' Here you may stop and destroy service's objects
        ' ******************
        Service_Terminate
        SetServiceState SERVICE_STOPPED
        SetEvent hStopEvent
        ' Waiting for service thread termination
        MsgWaitObj INFINITE, hnd, 1&
        CloseHandle hnd
    End If


а это функция ожидания:
Код: Выделить всё

' The MsgWaitObj function replaces Sleep,
' WaitForSingleObject, WaitForMultipleObjects functions.
' Unlike these functions, it
' doesn't block thread messages processing.
' Using instead Sleep:
'     MsgWaitObj dwMilliseconds
' Using instead WaitForSingleObject:
'     retval = MsgWaitObj(dwMilliseconds, hObj, 1&)
' Using instead WaitForMultipleObjects:
'     retval = MsgWaitObj(dwMilliseconds, hObj(0&), n),
'     where n - wait objects quantity,
'     hObj() - their handles array.

Public Function MsgWaitObj(Interval As Long, _
            Optional hObj As Long = 0&, _
            Optional nObj As Long = 0&) As Long
    Dim t As Long, T1 As Long
    If Interval <> INFINITE Then
        t = GetTickCount()
        On Error Resume Next
        t = t + Interval
        ' Overflow prevention
        If Err <> 0& Then
            If t > 0& Then
                t = ((t + &H80000000) _
                + Interval) + &H80000000
            Else
                t = ((t - &H80000000) _
                + Interval) - &H80000000
            End If
        End If
        On Error GoTo 0
        ' T contains now absolute time of the end of interval
    Else
        T1 = INFINITE
    End If
    Do
        If Interval <> INFINITE Then
            T1 = GetTickCount()
            On Error Resume Next
         T1 = t - T1
            ' Overflow prevention
            If Err <> 0& Then
                If t > 0& Then
                    T1 = ((t + &H80000000) _
                    - (T1 - &H80000000))
                Else
                    T1 = ((t - &H80000000) _
                    - (T1 + &H80000000))
                End If
            End If
            On Error GoTo 0
            ' T1 contains now the remaining interval part
            If IIf((T1 Xor Interval) > 0&, _
                T1 > Interval, T1 < 0&) Then
                ' Interval expired
                ' during DoEvents
                MsgWaitObj = STATUS_TIMEOUT
                Exit Function
            End If
        End If
        ' Wait for event, interval expiration
        ' or message appearance in thread queue
        MsgWaitObj = MsgWaitForMultipleObjects(nObj, _
                hObj, 0&, T1, QS_ALLINPUT)
        ' Let's message be processed
        DoEvents
        If MsgWaitObj <> nObj Then Exit Function
        ' It was message - continue to wait
    Loop
End Function

stallion
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.06.2005 (Чт) 13:36

Сообщение stallion » 29.06.2005 (Ср) 15:29

я говорю об использовании NTSVC.ocx . я не говорю о проекте сервис своими руками с тонной кода .

stallion
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.06.2005 (Чт) 13:36

Сообщение stallion » 29.06.2005 (Ср) 15:35

я убрал свойство Interactive . но по прежнему появляются ошибки в eventlog см. 1 сообщение

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 29.06.2005 (Ср) 15:46

тогда не знаю чем помочь, я все сервисы делаю без указанного ocx :cry:

stallion
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.06.2005 (Чт) 13:36

Сообщение stallion » 29.06.2005 (Ср) 15:56

если мы не используем сервис тогда :
1. в проекте sample есть управление сервисом .
2. в основном сервисе присутствует файл related documents - service.res / также там 2 модуля ntservice и sample /
вопрос - что из этого нужно для создания собственного сервиса .
вопрос 2 - как назвать сервис своим именем
вопрос 3 - в каком месте модуля вставлять свой код и иницилизировать переменные .
вопрос 4 - как там выводить текст в eventlog


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 67

    TopList