Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213

Проблема с запуском проги в качестве сервиса

13.02.2011, 16:16. Показов 982. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Обратите внимание на следующий код (его я нашел на одном из форумов, написан французом).
Он вполне соответствует схеме MSDN. Однако при запуске процесса через start в консоли сервисов (services.msc) прога вылетает на строке
Code
1
B = StartServiceCtrlDispatcher(ServiceTableEntry)
в функции InstServ. На мой взгляд это из-за проблеммы с адресом функции в предидущей строке.

Кто-нибудь может подсказать - где ошибка и как ее решить ?

[code]
'Main Module
Option Explicit

Public Sub Main()

setServiceName 'MyTest', 'My Service test program'
Select Case Command()
Case '/i'
InstServ 'install'

Case '/u'
InstServ 'uninstall'

Case Else

InstServ ''
End Select
End Sub

' Module with service functions
Option Explicit

Private Const SERVICE_ACCEPT_STOP = &H1
Private Const SERVICE_ACCEPT_PAUSE_CONTINUE = &H2
Private Const SERVICE_ACCEPT_SHUTDOWN = &H4

'Service Security and Access Rights
Private Const SC_MANAGER_CONNECT As Long = &H1
Private Const SC_MANAGER_CREATE_SERVICE As Long = &H2
Private Const SC_MANAGER_ENUMERATE_SERVICE As Long = &H4
Private Const SC_MANAGER_LOCK As Long = &H8
Private Const SC_MANAGER_MODIFY_BOOT_CONFIG As Long = &H20
Private Const SC_MANAGER_QUERY_LOCK_STATUS As Long = &H10
Private Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
Private Const SC_MANAGER_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or _
SC_MANAGER_CONNECT Or SC_MANAGER_CREATE_SERVICE Or _
SC_MANAGER_ENUMERATE_SERVICE Or SC_MANAGER_LOCK Or _
SC_MANAGER_QUERY_LOCK_STATUS Or SC_MANAGER_MODIFY_BOOT_CONFIG)

'For CreateService function
'dwServiceType
Private Const SERVICE_FILE_SYSTEM_DRIVER As Long = &H2
Private Const SERVICE_KERNEL_DRIVER As Long = &H1
Private Const SERVICE_WIN32_OWN_PROCESS As Long = &H10
Private Const SERVICE_WIN32_SHARE_PROCESS As Long = &H20
Private Const SERVICE_WIN32 = SERVICE_WIN32_OWN_PROCESS + _
SERVICE_WIN32_SHARE_PROCESS

'dwStartType
Private Const SERVICE_AUTO_START As Long = &H2
Private Const SERVICE_BOOT_START As Long = &H0
Private Const SERVICE_DEMAND_START As Long = &H3
Private Const SERVICE_DISABLED As Long = &H4
Private Const SERVICE_SYSTEM_START As Long = &H1

'dwErrorControl
Private Const SERVICE_ERROR_IGNORE As Long = &H0
Private Const SERVICE_ERROR_NORMAL As Long = &H1
Private Const SERVICE_ERROR_SEVERE As Long = &H2
Private Const SERVICE_ERROR_CRITICAL As Long = &H3

'Errors
Private Const ERROR_ACCESS_DENIED As Long = 5&
Private Const ERROR_CIRCULAR_DEPENDENCY As Long = 1059&
Private Const ERROR_DUPLICATE_SERVICE_NAME As Long = 1078&
Private Const ERROR_INVALID_HANDLE As Long = 6&
Private Const ERROR_INVALID_NAME As Long = 123&
Private Const ERROR_INVALID_PARAMETER As Long = 87
Private Const ERROR_INVALID_SERVICE_ACCOUNT As Long = 1057&
Private Const ERROR_SERVICE_EXISTS As Long = 1073&

Private Const SERVICE_QUERY_CONFIG = &H1
Private Const SERVICE_CHANGE_CONFIG = &H2
Private Const SERVICE_QUERY_STATUS = &H4
Private Const SERVICE_ENUMERATE_DEPENDENTS = &H8
Private Const SERVICE_START = &H10
Private Const SERVICE_STOP = &H20
Private Const SERVICE_PAUSE_CONTINUE = &H40
Private Const SERVICE_INTERROGATE = &H80
Private Const SERVICE_USER_DEFINED_CONTROL = &H100
Private Const SERVICE Dim ServiceTableEntry As SERVICE_TABLE_ENTRY
Dim B As Boolean
Dim cmd As String
Dim U As Long

cmd = Trim(LCase(commnd))
Select Case cmd


Case 'install'

' Install the Service
hSCManager = OpenSCManager(vbNullString, vbNullString, _
SC_MANAGER_ALL_ACCESS)
If (hSCManager = 0) Then MsgBox GetLastError()

hService = CreateService(hSCManager, ServiceName(), _
DisplayName(), SERVICE_ALL_ACCESS, _
SERVICE_WIN32_SHARE_PROCESS, _
SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, _
App.Path & ' .exe', vbNullString, _
vbNullString, vbNullString, vbNullString, _
vbNullString)
' hService = CreateService(hSCManager, ServiceName(), _
DisplayName(), SERVICE_ALL_ACCESS, _
SERVICE_WIN32_OWN_PROCESS, _
SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, _
App.Path & ' .exe', vbNullString, _
vbNullString, vbNullString, vbNullString, _
vbNullString)

CloseServiceHandle hService
CloseServiceHandle hSCManager

Case 'uninstall'

' Uninstall the Service
hSCManager = OpenSCManager(vbNullString, vbNullString, _
SC_MANAGER_CREATE_SERVICE)
hService = OpenService(hSCManager, ServiceName(), _
SERVICE_ALL_ACCESS)
DeleteService hService
CloseServiceHandle hService
CloseServiceHandle hSCManager

Case Else

'Execute the service
ServiceTableEntry.lpServiceName = ServiceName()
ServiceTableEntry.lpServiceProc = FncPtr(AddressOf ServiceMain)
B = StartServiceCtrlDispatcher(ServiceTableE ntry)

End Select
End Sub

Sub ServiceMain(ByVal dwArgc As Long, ByVal lpszArgv As Long)

Dim B As Boolean
Dim U As Long
Dim Z As Long

' Initial Configuration
ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS
ServiceStatus.dwCurrentState = SERVICE_START_PENDING
' Configuration of options accessible for la bo?te de dialogue of services
' Les contr?les que vous ne d?crivez pas ci-dessous apparaitront en gris?
ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP _
Or SERVICE_ACCEPT_PAUSE_CONTINUE _
Or SERVICE_ACCEPT_SHUTDOWN
ServiceStatus.dwWin32ExitCode = 0
ServiceStatus.dwServiceSpecificExitCode = 0
ServiceStatus.dwCheckPoint = 0
ServiceStatus.dwWaitHint = 0

hServiceStatus = RegisterServiceCtrlHandler(ServiceName, _
AddressOf Handler)
ServiceStatus.dwCurrentState = SERVICE_START_PENDING
B = SetServiceStatus(hServiceStatus, ServiceStatus)

ServiceStatus.dwCurrentState = SERVICE_RUNNING
B = SetServiceStatus(hServiceStatus, ServiceStatus)

' Ici votre programme, ou l'appelle de votre fonction

'B = Mafonction(MesVariables)

'' Si une erreur se produit, vous pouvez utiliser ceci:
''Gestion_Erreur:
'' SetServerStatus SERVICE_STOP_PENDING
'' Clean up
'' SetServerStatus SERVICE_STOPPED
End Sub

Sub Handler(ByVal fdwControl As Long)
Dim B As Boolean
Dim U As Long

Select Case fdwControl

Case SERVICE_CONTROL_PAUSE
'Do whatever it takes to pause here.
ServiceStatus.dwCurrentState = SERVICE_PAUSED

Case SERVICE_CONTROL_CONTINUE
'Do whatever it takes to continue
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.02.2011, 16:16
Ответы с готовыми решениями:

Проблемма с запуском проги в качестве сервиса
Обратите внимание на следующий код (его я нашел на одном из форумов, написан французом). Он вполне соответствует схеме MSDN. Однако при...

Как использовать текст в качестве кода проги?
Подскажите, как в VB текст взятый из вне (из файла, текстбокса) использовать в качестве части кода программы в реальном времени?

Проблема с запуском exe файлов
Проблема заключается в следующем....... Я хочу сделать некую форму, которая будет содержать, ну скажем, одну кнопку. И по нажатию на...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.02.2011, 16:16
Помогаю со студенческими работами здесь

Проблема с запуском документа Word через Shell
Я делаю так: Shell('start.exe winword.exe ' & FILENAME) Проблема же в том, что Word принимает только те файлы, имена которых состоят...

Проблема со запуском сервиса?
Есть сайт построен по базе MVC . По нуждам в дальнейшем обмена с клинскими приложениями, добавил WCF сервис. Скажу сразу скажу что я...

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

Вирус устанавливает сторонние проги автоматически с запуском системы
По неосторожности скачал и попробовал установить файл. Началась тихая установка чего то. Тогда я понял что натворил) В течение 10 минут...

Проблема с запуском 1C
такео вот дело, проблема с запуском 1с а точнее подключение к базе на сервере, в чем может заключаться проблемка? 5 рс юзают 1с с базами...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru