通过服务创建流程

时间:2018-08-28 11:55:49

标签: c++ windows winapi windows-services ghostscript

我正在使用WinAPI CreateProcess函数从C ++代码调用GhostScript(GS)命令行工具。当我将应用程序作为“通用”可执行文件运行时,一切正常,但是当我将我的应用程序作为服务运行时,出现了问题-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 :(得分:0)

您的进程可能在错误的桌面上运行。

您需要做很多事情来解决这个问题。完整的示例代码在这里:

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