mirror of
https://github.com/Ylianst/MeshAgent
synced 2025-12-06 00:13:33 +00:00
Fixed, so parameter passing to Service works correctly
This commit is contained in:
@@ -60,6 +60,8 @@ SERVICE_STATUS_HANDLE serviceStatusHandle = 0;
|
||||
INT_PTR CALLBACK DialogHandler(HWND, UINT, WPARAM, LPARAM);
|
||||
|
||||
MeshAgentHostContainer *agent = NULL;
|
||||
DWORD g_serviceArgc;
|
||||
char **g_serviceArgv;
|
||||
|
||||
/*
|
||||
extern int g_TrustedHashSet;
|
||||
@@ -279,8 +281,7 @@ void WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
|
||||
CONTEXT winException;
|
||||
size_t len = 0;
|
||||
WCHAR str[_MAX_PATH];
|
||||
char selfexe[_MAX_PATH];
|
||||
char *selfexe_ptr[] = { selfexe };
|
||||
|
||||
|
||||
UNREFERENCED_PARAMETER( argc );
|
||||
UNREFERENCED_PARAMETER( argv );
|
||||
@@ -307,10 +308,7 @@ void WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
|
||||
SetServiceStatus( serviceStatusHandle, &serviceStatus);
|
||||
|
||||
// Get our own executable name
|
||||
if (GetModuleFileNameW(NULL, str, _MAX_PATH) > 5)
|
||||
{
|
||||
wcstombs_s(&len, selfexe, _MAX_PATH, str, _MAX_PATH);
|
||||
}
|
||||
GetModuleFileNameW(NULL, str, _MAX_PATH);
|
||||
|
||||
#ifndef _MINCORE
|
||||
// Setup firewall
|
||||
@@ -323,7 +321,7 @@ void WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
|
||||
__try
|
||||
{
|
||||
agent = MeshAgent_Create(0);
|
||||
MeshAgent_Start(agent, 1, selfexe_ptr);
|
||||
MeshAgent_Start(agent, g_serviceArgc, g_serviceArgv);
|
||||
agent = NULL;
|
||||
}
|
||||
__except (ILib_WindowsExceptionFilter(GetExceptionCode(), GetExceptionInformation(), &winException))
|
||||
@@ -343,13 +341,15 @@ void WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
|
||||
}
|
||||
}
|
||||
|
||||
int RunService()
|
||||
int RunService(int argc, char* argv[])
|
||||
{
|
||||
SERVICE_TABLE_ENTRY serviceTable[2];
|
||||
serviceTable[0].lpServiceName = serviceName;
|
||||
serviceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
|
||||
serviceTable[1].lpServiceName = NULL;
|
||||
serviceTable[1].lpServiceProc = NULL;
|
||||
g_serviceArgc = argc;
|
||||
g_serviceArgv = argv;
|
||||
|
||||
return StartServiceCtrlDispatcher( serviceTable );
|
||||
}
|
||||
@@ -1300,7 +1300,7 @@ int main(int argc, char* argv[])
|
||||
else
|
||||
{
|
||||
UninstallService(serviceFileOld);
|
||||
if (argc > 1)
|
||||
if (argc > 1 && !strcmp(argv[1], "-recovery")==0)
|
||||
{
|
||||
// See if we need to run as a script engine
|
||||
if (argc >= 2 && ILibString_EndsWith(argv[1], -1, ".js", 3) != 0)
|
||||
@@ -1332,7 +1332,7 @@ int main(int argc, char* argv[])
|
||||
else
|
||||
{
|
||||
#ifndef _MINCORE
|
||||
if (RunService() == 0 && GetLastError() == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT)
|
||||
if (RunService(argc, argv) == 0 && GetLastError() == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT)
|
||||
{
|
||||
FreeConsole();
|
||||
|
||||
@@ -1350,7 +1350,7 @@ int main(int argc, char* argv[])
|
||||
}
|
||||
}
|
||||
#else
|
||||
RunService();
|
||||
RunService(argc, argv);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user