У нас есть Java-приложение, которое работает как сервер, работающий в удаленной системе Windows, которое запускается через пакетный скрипт, который включает в себя некоторые конфигурации инициализации.
Чтобы избежать входа в систему каждый раз и запуска / остановки службы, я планировал добавить этот пакетный скрипт в качестве «службы Windows» и использовать его удаленно через командную строку.После нескольких неудачных попыток я узнал, что нет простого способа сделать это без использования стороннего программного обеспечения, которое я не могу использовать из-за ограничений использования программного обеспечения.
В качестве решения я написал C /Программа на C ++, которую можно добавить как сервис и использовать.В программе работает файл.Сейчас я пытаюсь запустить пакетный сценарий [с использованием метода system ()], используя этот код, но пакетный сценарий не выполняется.Где, как это работает нормально в автономном режиме.
Предоставлено: http://www.devx.com/cplus/Article/9857
Пожалуйста, помогите мне исправить проблему.
Пакетный сценарий:
batscr.bat
ECHO Error Log Open >C:\MyServices\ERR.LOG
ECHO Error 1 >>C:\MyServices\ERR.LOG
ECHO Message 1 >>C:\MyServices\ERR.LOG
===============================================
Автономная программа C для выполнения пакетного сценария
BatchExe.cpp
#include
#include
void main()
{
system("C:\\MyServices\\batscr.bat");
}
=======================
Программа для службы
StartScript.cpp
#include
#include
#include
#define SLEEP_TIME 5000
#define LOGFILE "C:\\MyServices\\memstatus.txt"
SERVICE_STATUS ServiceStatus;
SERVICE_STATUS_HANDLE hStatus;
void ServiceMain(int argc, char** argv);
void ControlHandler(DWORD request);
void InitService();
void main()
{
SERVICE_TABLE_ENTRY ServiceTable[2];
ServiceTable[0].lpServiceName = "StartScript";
ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
ServiceTable[1].lpServiceName = NULL;
ServiceTable[1].lpServiceProc = NULL;
// Start the control dispatcher thread for our service
StartServiceCtrlDispatcher(ServiceTable);
}
void ServiceMain(int argc, char** argv)
{
int error;
ServiceStatus.dwServiceType = SERVICE_WIN32;
ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwServiceSpecificExitCode = 0;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;
hStatus = RegisterServiceCtrlHandler(
"StartScript",
(LPHANDLER_FUNCTION)ControlHandler);
if (hStatus == (SERVICE_STATUS_HANDLE)0)
{
// Registering Control Handler failed
return;
}
// Initialize Service
InitService();
// We report the running status to SCM.
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus (hStatus, &ServiceStatus);
return;
}
// Service initialization
void InitService()
{
system("C:\\MyServices\\batscr.bat");
return;
}
// Control handler function
void ControlHandler(DWORD request)
{
switch(request)
{
case SERVICE_CONTROL_STOP:
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus (hStatus, &ServiceStatus);
return;
case SERVICE_CONTROL_SHUTDOWN:
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus (hStatus, &ServiceStatus);
return;
default:
break;
}
// Report current status
SetServiceStatus (hStatus, &ServiceStatus);
return;
}
Спасибо и С уважением...