Создать процесс из сервиса - PullRequest
0 голосов
/ 28 августа 2018

Я вызываю инструмент командной строки GhostScript (GS) из кода C ++ с функцией WinAPI CreateProcess. Когда я запускаю свое приложение как «общий» исполняемый файл, все работает нормально, но когда я запускаю свое приложение как службу, что-то идет не так - процесс GS создается, и он отображается в списке процессов диспетчера задач, но затем ничего не происходит. Если я запускаю свое приложение в качестве службы в Windows 7, оно работает правильно, но в Windows 10 возникает вышеуказанная проблема. Код указан ниже. Буду благодарен за любые советы.

std::string cmd = ("gswin32c.exe -sDEVICE=mswinpr2 -dBATCH -dNOPAUSE -dNOSAFER -dNoCancel=true -sOutputFile=\"%printer%HPLJ2000\" \"1.pdf\"");
SECURITY_ATTRIBUTES sa;`sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
auto dwFlags = FILE_ATTRIBUTE_NORMAL;
STARTUPINFOW si;
GetStartupInfoW(&si);
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
ZeroMemory(&pi, sizeof(pi));

if (!CreateProcess(NULL, cmd.c_str(), NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) {
    std::err << "Something went wrong" << std::endl;
}

WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);

1 Ответ

0 голосов
/ 28 августа 2018

Возможно, ваш процесс запущен не на том рабочем столе.

Есть куча вещей, которые нужно сделать, чтобы это исправить. Полный пример кода здесь:

https://stackoverflow.com/a/50743993/5743288

...