lm68140318 发表于 2023-4-23 11:15:28

CreateProcess

        CONST TCHAR path[] = _T("C:\\Users\\Administrator\\Desktop\\test.exe");
        LPPROCESS_INFORMATION info = NULL;
        STARTUPINFO si = { sizeof(si) };

        BOOL b= CreateProcess(path,NULL,NULL,NULL, FALSE,NULL,NULL,NULL, &si, info);//创建一个新的进程和它的主线程

        DWORD error = GetLastError();
        CString str;
        str.Format(_T("b=%d\r\n"),b);
        ::OutputDebugString(str);

        str.Format(_T("error=%d\r\n"), error);
        ::OutputDebugString(str);




错误信息:参数错误    错在哪儿??

isdkz 发表于 2023-4-23 11:24:45

您的代码有几个问题,导致了“参数错误”。以下是修复这些问题的方法:

1. `LPPROCESS_INFORMATION info` 应该定义为 `PROCESS_INFORMATION` 结构体,而不是指针。

2. 使用 `&` 运算符在调用 `CreateProcess()` 时传递 `info` 的地址。

修复这些问题后,代码如下:

#include <windows.h>
#include <tchar.h>
#include <atlstr.h>

int _tmain() {
    CONST TCHAR path[] = _T("C:\\Users\\Administrator\\Desktop\\test.exe");
    PROCESS_INFORMATION info; // 修改为定义结构体而不是指针
    STARTUPINFO si = { sizeof(si) };

    BOOL b = CreateProcess(path, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &info); // 使用 & 运算符传递 info 的地址

    DWORD error = GetLastError();
    CString str;
    str.Format(_T("b=%d\r\n"), b);
    ::OutputDebugString(str);

    str.Format(_T("error=%d\r\n"), error);
    ::OutputDebugString(str);

    return 0;
}


这个修改后的代码应该可以正常运行,并且没有参数错误。请注意,如果您在运行时遇到权限问题,您可能需要以管理员身份运行程序。

yinda_peng 发表于 2023-4-23 11:42:36

我建议,问问题代码要给出一些注释,代码量少还好,代码量一大就没人给你慢慢看了,但这是一个好的习惯,至少要给出你写这段代码的目的,就这样丢出一段代码不是一个好的问问题的习惯

lm68140318 发表于 2023-4-23 13:24:14

非常感谢二楼和三楼
页: [1]
查看完整版本: CreateProcess