After_hours1203 2023-02-28 01:09 采纳率: 50%
浏览 19
已结题

for循环创建新进程失败

请问Windows下用for循环创建新进程为什么只有第一个成功创建了呢QAQ
是操作系统的实验,实验要求如下:
Windows 环境下, 利用高级语言编程环境( 限定为 VS 环境或VC 环境) 调用相关的系统调用(CreateProccess,即系统 API)实现一个包括 “进程创建,文件读写”的应用程序。
有一个文本文件 CommandList.txt, 第一行是说明性文字:本文件最后一次打开和运行日期是20190407。第二行开始每行是一个可执行程序的名称(含路径)。 编写一个应用程序能打开该文件,并顺序执行其中的每个程序,并更新文件第一行中的日期。

img


我把文件打开和日期修改放在主进程中,只有打开txt里的应用程序想用CreateProcess()实现

   // 创建子进程
    for(int i=0; i<path.size(); ++i){
        STARTUPINFO si = {sizeof(si)};
        PROCESS_INFORMATION pi;
        // path是vector<string>向量,保存每行路径,p作为创建进程的lpCommandLine
        char p[path[i].size()];
        cout<<"new path "<<i<<": ";
        for(int j=0; j<path[i].size(); ++j){
                p[j] = path[i][j];
                cout<<p[j];
        }
        cout<<endl;

       //每个路径都创建一个新进程打开
        bool ret = CreateProcess(NULL, p, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
        if(ret) {
            cout<<"子进程id: "<<pi.dwProcessId<<endl;
        }
        else {
            cout<<"子进程创建失败!失败原因:"<<GetLastError()<<endl;
        }
    }

运行结果:

img

这样运行以后只有第一个循环能成功创建,接下来的都创建失败,GetLastError()=2,我查了是文件不存在,但是我的路径都是正确的,现在就是不知道哪里错了orz
有没有人帮忙看看,万分感谢!

  • 写回答

1条回答 默认 最新

  • MarkHan_ 2023-02-28 08:27
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    根据你提供的代码,我看到有一个问题是在为 'lpCommandLine时可能会出现一些问题。

    为了解决这个问题,可以将 'char p[path[i].size()

    for (int i = 0; i < path.size(); ++i) {
        STARTUPINFO si = { sizeof(si) };
        PROCESS_INFORMATION pi;
    
        char p[path[i].size() + 1]; // 为 null 终止符留出一个字节的空间
        for (int j = 0; j < path[i].size(); ++j) {
            p[j] = path[i][j];
        }
        p[path[i].size()] = '\0'; // 在字符串结尾添加 null 终止符
    
        bool ret = CreateProcess(NULL, p, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
        if (ret) {
            cout << "子进程id: " << pi.dwProcessId << endl;
        } else {
            cout << "子进程创建失败!失败原因:" << GetLastError() << endl;
        }
    }
    
    
    

    希望这个修改能解决你的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月28日
  • 修改了问题 2月28日
  • 创建了问题 2月28日

悬赏问题

  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上