|
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
|
||||||
Проблема с запуском проги в качестве сервиса13.02.2011, 16:16. Показов 982. Ответов 0
Метки нет (Все метки)
Обратите внимание на следующий код (его я нашел на одном из форумов, написан французом).
Он вполне соответствует схеме MSDN. Однако при запуске процесса через start в консоли сервисов (services.msc) прога вылетает на строке
Кто-нибудь может подсказать - где ошибка и как ее решить ? [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
|
||||||
| 13.02.2011, 16:16 | |
|
Ответы с готовыми решениями:
0
Проблемма с запуском проги в качестве сервиса Как использовать текст в качестве кода проги? Проблема с запуском exe файлов |
| 13.02.2011, 16:16 | |
|
Помогаю со студенческими работами здесь
1
Проблема со запуском сервиса? Проблема с запуском системного сервиса Вирус устанавливает сторонние проги автоматически с запуском системы Проблема с запуском 1C Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка 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.
Задача: при создании документов установить период списания автоматически. . .
|