在作为网络服务运行时启动带参数的可执行文

时间:2013-03-07 23:53:38

标签: c++ windows winapi shell process

如果我作为网络服务运行,如何使用提供的参数启动可执行文件?我已尝试在我的程序中使用ShellExecuteEx(作为网络服务运行):

try
{

    DWORD dwErr;
    TCHAR bufProgName[1000] = _T("");
    TCHAR bufParameters[1000] = _T("");

    ::lstrcat(bufProgName,_T("C:\\NotMyFault\\x86\\NotMyFault.exe"));
    ::lstrcat(bufParameters,_T(" -help"));

    SHELLEXECUTEINFO ShExecInfo;
    ZeroMemory(&ShExecInfo,sizeof(ShExecInfo));
    ShExecInfo.cbSize=sizeof(ShExecInfo);
    ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
    ShExecInfo.hwnd = NULL;
    ShExecInfo.lpVerb = NULL;
    ShExecInfo.lpFile = bufProgName;        
    ShExecInfo.lpParameters = bufParameters;
    ShExecInfo.lpDirectory = NULL;
    ShExecInfo.nShow = SW_SHOWNORMAL;
    ShExecInfo.hInstApp = NULL; 
    int res = ShellExecuteEx(&ShExecInfo);
    if(!res)
    {
        dwErr = GetLastError();
        return -1;
    }

}
catch(...)
{
    std::cout<<"ShellFail: " << dwError;
    return -1;

}

但所有这一切都是启动NotMyFault.exe作为用户网络服务运行(我从任务管理器看到这一点),但它没有提供帮助。其他参数(“-crash”)也是一样。

我知道这是匆匆编写的代码,但是我需要查看运行为​​网络服务(如我的)的进程是否可以成功执行此操作。当我以另一个用户身份运行它(通过双击可执行文件)时,它似乎工作正常。

1 个答案:

答案 0 :(得分:4)

您的服务在会话0中运行。您的交互式桌面位于不同的会话中。因此,当您的服务启动流程时,您将看不到任何内容。因为它在与会话0相同的会话中启动。

如果您希望服务在交互式桌面上启动流程,尽管很难:Launching an interactive process from Windows Service in Windows Vista and later