【发布时间】:2016-09-26 12:20:27
【问题描述】:
我正在尝试通过我的 c++ 程序启动命令行,然后让 cmd 运行命令。我不确定我做错了什么。我查看了 MSDN 文档,但无法理解代码中要更改的内容。
以下是我编写的代码块。我正在尝试启动 cmd,然后在 cmdArgs 中运行该命令。但是,在运行程序时,它只是启动 cmd 而不运行它的 nslookup 部分。我尝试过使用其他命令以及 ipconfig,但它们没有被执行。有人可以帮我理解我做错了什么。
当我启动程序时,它只是打开了 cmd。我要做的是让 cmdArgs 运行并在 cmd 屏幕上查看输出。
我是 C++ 新手,所以如果这是微不足道的,我深表歉意。我查看了网站上的其他问题,但似乎 cmdArgs 的格式是正确的 - 程序名称后跟 arg。
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
LPTSTR cmdPath = _T("C:\\Windows\\System32\\cmd.exe");
LPTSTR cmdArgs = _T("C:\\Windows\\System32\\cmd.exe nslookup myip.opendns.com. resolver1.opendns.com");
if (!CreateProcess(cmdPath, cmdArgs, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
std::cout << "Create Process failed: " << GetLastError() << std::endl;
return "Failed";
}
【问题讨论】:
-
您需要为命令行传递一个可写字符串,因为 CreateProcess 可能会按照文档中的说明对其进行修改。像
TCHAR cmdArgs[] = _T("...");这样的东西如果你遇到了崩溃,你应该在调试器中运行它来找出哪里以及为什么。 -
你为什么要这样做?为什么不直接运行 nslookup?
标签: c++ windows winapi command-prompt createprocess