【发布时间】:2017-10-13 14:44:53
【问题描述】:
我希望你的编程进展顺利。
由于我缺乏知识,我有一个问题希望能得到一个简单的答案。
我已经使用了这个问题的代码 - CreateProcess cmd.exe read/write pipes deadlock
一切正常。
问题是当我从需要交互的 cmd.exe shell 运行其他命令时,例如 python 或 powershell,我得到初始输出,然后没有任何内容写入管道。
这就是我的输入/输出的样子:
static PCSTR commands[] = { "powershell\r\n", "dir\r\n", "help\r\n"};
ULONG n = RTL_NUMBER_OF(commands);
PCSTR* psz = commands;
do
{
if (MessageBoxW(0,0, L"force close ?", MB_YESNO) == IDYES)
{
DisconnectNamedPipe(hFile);
break;
}
if (p = new U_IRP(&obj))
{
PCSTR command = *psz++;
p->Write(command, (ULONG)strlen(command) * sizeof(CHAR));
p->Release();
}
} while (--n)
当代码运行时,我得到初始的 powershell.exe 提示符
PS C:\Users>
但在那之后没有任何东西被写入管道。
代码正在使用 CreateProcess(... "cmd.exe" ...) 我尝试将其从 "cmd.exe" 更改为 "cmd.exe /c" 和 "cmd.exe /k",两者都不起作用。
也许您会知道我需要从 CreateProcess() 诱导管道读取/写入输出以解释诸如 python 或 powershell 的内容吗?感谢您的帮助!
【问题讨论】:
-
至少显示U_IRP的代码和调用CreateProcess的部分。但更好的是,阅读How to Ask 并提供minimal reproducible example。
-
寻求调试帮助的问题必须包括具体问题以及在问题本身中重现该问题所需的最短代码。请阅读如何创建minimal reproducible example 和How to Ask。
-
C != C++。仅使用您正在使用的语言进行标记,除非两者确实相关。
-
两者实际上都是相关的,如果您点击我发布的完整代码的链接...
-
do {...}错过了while语句。
标签: c++ winapi visual-c++ cmd