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

时间:2015-04-03 21:07:18

标签: c++ windows service

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

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

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

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

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

然后我将代码移动到已注册的服务主程序中,添加30秒的睡眠延迟,启动服务,然后将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文件并写一个文件。路径设置错了。非常感谢

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

转到http://nginx-win.ecsds.eu/ 并下载Install_nginx_php_services.zip,阅读脚本如何为nginx和php以及其他任何工作,所用工具的来源可以在MS的网站上找到。