无法将命令行传递给 CreateProcess 创建的新 exe

Unable to pass command line to new exe created by CreateProcess

我现在正尝试从用 C++ 编写的应用程序中调用 .exe 我尝试调用的 exe 是一个 Kermit 程序 (k95.exe) - 一个文件传输应用程序。

在不使用 C++ 的情况下,我可以在 Kermit 程序中输入命令并且它有效。

但是,现在我正在尝试使用 CreateProcess() 在我的应用程序中调用这个 'Kermit' 程序。

在这个阶段,我可以成功调用'Kermit'程序。 Kermit 应用程序能够成功启动。

现在,我们想通过我的 C++ 应用程序将 "Take connect.txt" 键入控制台,但我们不知道如何继续。

我知道我们可以传递命令 CreateProcess(),有点像传递函数参数,但我不打算立即关闭这个 Kermit 程序。 在此期间,我可能仍想将其用于其他操作,例如下载或上传文件。

我们无法完成上述所有操作,因为 CreateProcess() 没有 return window 句柄。


备注

    上面使用的
  1. "Take"是k95.exe

  2. 的命令之一
  3. 这是我的 CreateProcess 函数所在位置:

            bool LaunchKermitExe( const char path, char cmdLine)
            {
             STARTUPINFO         si;
             SECURITY_ATTRIBUTES saProcess, saThread;
             PROCESS_INFORMATION piProcess;
             bool bSuccess;
             DWORD lasterr;
    
    
             // setup STARTUPINFO struct
             ZeroMemory(&si, sizeof(si));
             si.cb = sizeof(si);
    
             // make new process handle inheritable
             saProcess.nLength = sizeof(saProcess);
             saProcess.lpSecurityDescriptor = NULL;
             saProcess.bInheritHandle = TRUE;
    
             // make the new thread handle not inheritable
             saThread.nLength = sizeof(saThread);
             saThread.lpSecurityDescriptor = NULL;
             saThread.bInheritHandle = FALSE;
    
             bSuccess = CreateProcess(path, cmdLine, NULL, NULL,TRUE,
                     0, NULL, NULL, &si, &piProcess);
    
             lasterr = GetLastError();
    
             // now close handles to detach the process
              CloseHandle(piProcess.hThread);
              CloseHandle(piProcess.hProcess);
    
             return bSuccess;
            }   
    

所以您需要做的是写入该进程的标准输入。我对 windows CreateProcess api 不熟悉,因此您需要自己查看一下。 This example on 显示了几个示例,其中读取了一个文件并将其填充到被调用进程的标准输入中。做这种事情没有简单的方法,所以准备学习很多关于管道的知识吧!

Kermit 应用显然有自己的用户输入命令处理器。您必须在创建进程时重定向其 STDIN,以便您可以根据需要向其写入自己的数据。 MSDN 中有一段对此进行了详细描述:

Creating a Child Process with Redirected Input and Output