樱@吻ov 2022-03-30 11:37 采纳率: 0%
浏览 26
已结题

创建进程出现无限弹窗口

这是一个创建进程的任务

代码

/ procreate项目
# include <windows.h>
# include <iostream>
# include <stdio.h>
// 创建传递过来的进程的克隆过程并赋于其ID值
void StartClone(int nCloneID)
{
    // 提取用于当前可执行文件的文件名
    TCHAR szFilename[MAX_PATH] ;
    :: GetModuleFileName(NULL, szFilename, MAX_PATH) ;

    // 格式化用于子进程的命令行并通知其EXE文件名和克隆ID
    TCHAR szCmdLine[MAX_PATH] ;
    :: sprintf(szCmdLine, " %s %d ", szFilename, nCloneID) ;

    // 用于子进程的STARTUPINFO结构
    STARTUPINFO si;
    :: ZeroMemory(reinterpret_cast <void*> (&si) , sizeof(si) ) ;
    si.cb = sizeof(si) ;                    // 必须是本结构的大小

    // 返回的用于子进程的进程信息
    PROCESS_INFORMATION pi;

    // 利用同样的可执行文件和命令行创建进程,并赋于其子进程的性质
    BOOL bCreateOK = :: CreateProcess(
            szFilename,                    // 产生这个EXE的应用程序的名称
            szCmdLine,                    // 告诉其行为像一个子进程的标志
            NULL,                        // 缺省的进程安全性
            NULL,                        // 缺省的线程安全性
            FALSE,                        // 不继承句柄
            CREATE_NEW_CONSOLE,        // 使用新的控制台
            NULL,                        // 新的环境
            NULL,                        // 当前目录
            &si,                        // 启动信息
            &pi) ;                        // 返回的进程信息

    // 对子进程释放引用
    if (bCreateOK)
    {
        :: CloseHandle(pi.hProcess) ;
        :: CloseHandle(pi.hThread) ;
    }
    return;
}

int main(int argc, char* argv[] )
{
    // 确定进程在列表中的位置
    int nClone=0 ;
    if (argc > 1)
    {
        // 从第二个参数中提取克隆ID
        :: sscanf(argv[1] , "%d", &nClone) ;
    }

    // 显示进程位置
    std :: cout << "Process lD: "<< :: GetCurrentProcessId()
                <<",Clone ID: " << nClone
                << std :: endl;
    // 检查是否有创建子进程的需要
    const int c_nCloneMax = 5;
    if (nClone < c_nCloneMax)
    {
        // 发送新进程的命令行和克隆号
        StartClone(++nClone) ;
    }

    // 在终止之前暂停一下 (l/2秒)
    :: Sleep(500) ;
    return 0;
}

运行后它会无限弹窗口,活脱脱像一个病毒,只有重启电脑。我删除if那个条件,只写一个startClone函数,它也会无限弹出窗口,我想知道为什么它会无限弹窗口,或者怎么改它只会创建一次进程。
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月7日
    • 创建了问题 3月30日

    悬赏问题

    • ¥15 在不同的执行界面调用同一个页面
    • ¥20 基于51单片机的数字频率计
    • ¥50 M3T长焦相机如何标定以及正射影像拼接问题
    • ¥15 keepalived的虚拟VIP地址 ping -s 发包测试,只能通过1472字节以下的数据包(相关搜索:静态路由)
    • ¥20 关于#stm32#的问题:STM32串口发送问题,偶校验(even),发送5A 41 FB 20.烧录程序后发现串口助手读到的是5A 41 7B A0
    • ¥15 C++map释放不掉
    • ¥15 Mabatis查询数据
    • ¥15 想知道lingo目标函数中求和公式上标是变量情况如何求解
    • ¥15 关于E22-400T22S的LORA模块的通信问题
    • ¥15 求用二阶有源低通滤波将3khz方波转为正弦波的电路