createprocess执行cmd命令 
时间: 2023-06-05 10:47:26 浏览: 209
CreateProcess 是一个Windows API函数,可以用来创建新的进程并将其初始化。在Windows系统中,cmd命令可以通过CreateProcess函数在命令行窗口中执行。
CreateProcess函数需要几个参数,这些参数包括指定新进程的文件名、命令行参数、进程安全性和环境变量等等。此外,可以指定该进程的初始工作目录。如果执行的是一个cmd命令,那么需要在参数中指定cmd.exe文件的路径和命令行参数,以及所需的输入和输出流信息。
为了在代码中使用CreateProcess函数执行cmd命令,可以先调用CreatePipe函数以创建输入和输出管道。然后将管道信息传递给STARTUPINFO结构,并将该结构传递给CreateProcess函数。在执行CreateProcess函数后,可以使用WriteFile函数向标准输入流中写入命令并使用ReadFile函数从标准输出流中读取命令结果。
通过这种方式,可以在代码中使用CreateProcess函数执行cmd命令,而无需打开一个命令行窗口。此外,可以通过这种方式将该命令嵌入到另一个应用程序中,以便自动化执行各种任务。
相关问题
c++ 给同一个cmd传输多次命令
在C++中,可以使用`system`函数来执行系统命令,也可以使用`CreateProcess`函数来创建一个新的进程并执行系统命令。以下是使用`system`函数来给同一个cmd传输多次命令的示例代码:
```c++
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
// 命令列表
const char* cmds[] = {"cd C:\\Users", "dir"};
// 执行命令
for (int i = 0; i < 2; i++) {
system(cmds[i]);
}
return 0;
}
```
在这个代码中,我们使用一个字符串数组`cmds`来存储要执行的命令。然后使用一个循环来遍历这个数组,并使用`system`函数来执行每个命令。
注意,在使用`system`函数执行命令时,要注意命令中的反斜杠`\`需要使用两个来转义,否则会被解释为转义字符。因此,我们在这里使用`C:\\Users`来表示`C:\Users`。
如果你想使用`CreateProcess`函数来执行命令,可以参考以下代码:
```c++
#include <iostream>
#include <windows.h>
using namespace std;
int main() {
// 命令列表
const char* cmds[] = {"cmd.exe /c cd C:\\Users", "cmd.exe /c dir"};
// 执行命令
for (int i = 0; i < 2; i++) {
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
// 创建进程
if (!CreateProcess(NULL, (LPSTR)cmds[i], NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
cerr << "CreateProcess failed" << endl;
return 1;
}
// 等待进程结束
WaitForSingleObject(pi.hProcess, INFINITE);
// 关闭句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
return 0;
}
```
在这个代码中,我们使用一个字符串数组`cmds`来存储要执行的命令。然后使用一个循环来遍历这个数组,并使用`CreateProcess`函数来创建一个新的进程并执行每个命令。在创建进程时,我们使用`cmd.exe /c`来告诉系统要执行的是一个命令行命令。然后使用`WaitForSingleObject`函数来等待进程结束,最后关闭进程和线程句柄。
Cannot run program "cmd": CreateProcess error=206, ??????ò)???
问题中提到的错误信息"Cannot run program "cmd": CreateProcess error=206, 文件名或扩展名太长"可能是由于文件路径过长所导致的。这个问题通常出现在Windows系统中,因为Windows对于文件路径的长度有一定的限制。引用提到的错误信息中的文件路径"C:\Program Files\Java\jdk-11.0.8\bin\java.exe"可能超过了Windows系统所允许的字符数限制。
解决这个问题的一种方法是将文件路径缩短。可以尝试将Java安装路径调整为较短的路径,比如将其安装到根目录下或者直接安装到一个不太深的文件夹中。
另外,还可以尝试使用相对路径代替绝对路径来执行命令。相对路径是相对于当前工作目录的路径,通常更短。
如果以上方法无效,还可以考虑使用文件系统的符号链接(symbolic link)来解决这个问题。符号链接是一种特殊的文件,可以将一个长路径映射到一个短路径上,从而避免文件路径过长。
总之,解决"Cannot run program "cmd": CreateProcess error=206, 文件名或扩展名太长"错误的关键是缩短文件路径,可以通过调整安装路径、使用相对路径或者使用文件系统的符号链接来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [Idea社区版 debug 启动 Cannot run program ““ :CreateProcess error=206, 文件名或扩展名太长](https://blog.csdn.net/wo240/article/details/119644123)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [eclipse develop hadoop chmod :Cannot run program "chmod": CreateProcess error=2, ?????????-附件资源](https://download.csdn.net/download/weixin_42202595/15527532)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [windows下eclipse跑junit报错:CreateProcess error=206](https://download.csdn.net/download/goldenfish1919/6244901)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
相关推荐









