Я пытаюсь выполнить командный файл из моей службы C ++ Windows.Этот пакетный файл просто создает пустой файл, используя echo. 2>EmptyFile.txt
.
Мой сервисный код выглядит следующим образом:
PROCESS_INFORMATION procHandles;
STARTUPINFOA startWinInfo;
BOOL result;
char * cmdname = "C:\\Windows\\System32\\cmd.exe";
char * cmdargs = "C:\\Users\\user\\Desktop\MyBatFile.bat";
DWORD procFlags;
DWORD waitStatus = 0;
DWORD procStatus = 0;
DWORD winErrCode;
DWORD inloop = 1;
memset(&startWinInfo, 0, sizeof(startWinInfo));
startWinInfo.cb = sizeof(startWinInfo);
startWinInfo.lpTitle = "Slaved Console";
procFlags = (CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE |
CREATE_NEW_PROCESS_GROUP);
procHandles.hProcess = INVALID_HANDLE_VALUE;
procHandles.hThread = INVALID_HANDLE_VALUE;
procHandles.dwProcessId = 0;
procHandles.dwThreadId = 0;
result = CreateProcessA(
cmdname, cmdargs, NULL, NULL, 0, procFlags, NULL,
NULL, &startWinInfo, &procHandles);
if (result == 0)
{
winErrCode = GetLastError();
exit(255); // error with CreateProcessA()
}
waitStatus = WaitForInputIdle(procHandles.hProcess, 6000);
inloop = GetExitCodeProcess(procHandles.hProcess, &procStatus);
while (procStatus == STILL_ACTIVE && inloop)
{
waitStatus = WaitForSingleObject(procHandles.hProcess, 30000);
if (waitStatus == WAIT_TIMEOUT)
{
inloop = 1;
}
else if (waitStatus == WAIT_OBJECT_0)
{
inloop = GetExitCodeProcess(procHandles.hProcess, &procStatus);
}
else
{
inloop = 0; // some type of wait abandon or error ...
exit(254);
}
}
CloseHandle(procHandles.hProcess);
CloseHandle(procHandles.hThread);
exit(procStatus);
Он продолжает давать мне WAIT_TIMEOUT
и не выполняет пакетный файл.Кто-нибудь может мне помочь с этим?