c++ - 有没有办法从服务中运行可执行文件?

标签 c++ windows service

我使用这里的模板开始了我的服务设计:

https://msdn.microsoft.com/en-us/library/windows/desktop/bb540475(v=vs.85).aspx

我只想打开记事本来证明我可以在服务中做一些事情,因为最终我想运行以在将启动 nginx 服务器的单独进程中启动批处理文件。然后我想运行一个停止服务器批处理文件来停止它。看起来很简单。

我创建了一个进程并在 C++ 项目的 main 中运行它(这个 main 注册了一个服务 main 以在服务启动时调用)。

在 visual studio 的调试器中,我看到 createprocess 返回正常,然后记事本打开。

然后我将该代码移动到已注册的主服务中,添加 30 秒的 sleep 延迟,启动该服务,然后将 visual studio 的调试器附加到该进程。我看到代码在创建记事本进程时遇到了我的断点。

然后创建进程函数返回正常,但由于某种原因记事本打不开。

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx

if (!CreateProcess(
        "C:\\Windows\\System32\\Notepad.exe",   // No module name (use command line)
        NULL,        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi           // Pointer to PROCESS_INFORMATION structure
        )
        )
    {
        printf("CreateProcess failed (%d).\n", GetLastError());
    }

我成功地运行了bat文件并写入了一个文件。路径设置错了。非常感谢

最佳答案

服务在没有桌面的单独用户帐户下运行。你可以完美地正常运行进程,但你无法显示任何 UI。

关于c++ - 有没有办法从服务中运行可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29439677/

相关文章:

c++ - 是否可以执行范围添加更新,将线性函数添加到最大段树?

C++ 破坏表达式中的临时对象

service - 如何查询 WMI 以了解启动服务的用户名?

android - 如何从广播接收器中注销监听器并停止服务

c - Windows 相当于 sync()

c# - Windows 服务打印 PDF

c++ - 如何在 Win x64 中的 32 位和 64 位应用程序之间共享 HWND?

c++ - 文字转语音 SAPI 语音

c - 尝试将 str 写入具有特殊文件名 "con"的文件,但它被打印到 stdout

windows - Intel 和 AMD 处理器的 PROCESSOR_ARCHITECTURE 的奇怪注册表值