c++ CreateProcess() 不适用于带有正斜杠 "/"的 app 和 args - 与 App=NULL 一起使用

标签 c++ winapi createprocess

解决方案:“

    ShellAndWait(NULL, _FinalShellStrCmd, "WAIT", 240, 1);

使用stringstream将App和Arg组合成_FinalShellStrCmd,将第一个arg保留为NULL。它适用于正斜杠或反斜杠。再次感谢大家。

我正在使用 boost 获取当前路径,然后我得到“d:/bin/test. 现在,我尝试使用 CreateProcess() 库函数调用下面的 ShellAndWait()。在目录路径中使用反斜杠“\,例如.. d:\bin\test。它就像魅力一样。

我已经将应用程序路径和参数打印到 dos 提示符,然后我将它们复制并传递到 dos 提示符,它执行正常。例如,D:/bin/test/test.exe d:/bin/test/test.dat 应用程序路径参数

如果我将应用程序路径和参数放在下面的 ShellWandWait 函数中,它什么也没做。我怀疑 CreateProcess() 不会使用正斜杠“/”的路径或目录。 有人给我点灯吗?再次感谢。

int BasicExcelCell::ShellAndWait(char *AppName, char *AppArgument, char *Wait, DWORD       TimeOut=0, DWORD IgnoreErrorFlag=0)
{

PROCESS_INFORMATION ProcessInfo; //This is what we get as an [out] parameter
STARTUPINFO StartupInfo; //This is an [in] parameter
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ; //Only compulsory field


TimeOut =  TimeOut * 1000;

if (Wait == "NOWAIT")
    ShellExecute(NULL,"open",AppName, AppArgument," ", SW_SHOW );
else //WAIT
{
    //printf("ShellExecute WAIT\n");
    printf("Appname:%s  AppArgs:%s\n", AppName, AppArgument);
    UINT olderrormode;

    if (IgnoreErrorFlag)
    {
          olderrormode = SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOGPFAULTERRORBOX);
    }

    if (CreateProcess(AppName, AppArgument,
                      NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,
                      NULL,&StartupInfo,&ProcessInfo))
    {
        std::cout<<"WaitingSingleOjbec"<<endl;
        DWORD dwret = WaitForSingleObject(ProcessInfo.hProcess,TimeOut);
        switch (dwret)
        {
        case WAIT_OBJECT_0:
            break;
        case WAIT_TIMEOUT:
        default:
            TerminateProcess(ProcessInfo.hProcess,0);
            break;
        }
        CloseHandle(ProcessInfo.hThread);
        CloseHandle(ProcessInfo.hProcess);
    }

    if (IgnoreErrorFlag)
    {
        SetErrorMode(olderrormode);
    }
}

return 0;

}

最佳答案

您已经有了答案:CreateProcess 不适用于正斜杠。修复斜杠 => 代码有效。某些面向用户的 API 和界面比其他的更容易接受

关于c++ CreateProcess() 不适用于带有正斜杠 "/"的 app 和 args - 与 App=NULL 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5652834/

相关文章:

c++ - 在远程桌面中创建 DirectX 设备失败

c++ - 我找不到 g_io_channel_win32_make_pollfd 的任何文档

c++ - 有没有比在循环中忽略更好的方法来提取字符串流的第n个元素?

C++编译问题

c - Windows 10 对话框标题栏行为

winapi - CreateProcess 和奇怪的 nslookup 错误

c++ - 在堆栈上工作 "function calls"?

c++ - 如何使用线性渐变创建文本?

c++ - 使用 CreateProcess 运行批处理文件

c++ - Windows 服务未作为本地 session 启动