鱼C论坛

 找回密码
 立即注册
查看: 363|回复: 3

[已解决]CreateProcess

[复制链接]
发表于 2023-4-23 11:15:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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

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

复制代码



错误信息:参数错误    错在哪儿  ??
最佳答案
2023-4-23 11:24:45
您的代码有几个问题,导致了“参数错误”。以下是修复这些问题的方法:

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

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

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

  1. #include <windows.h>
  2. #include <tchar.h>
  3. #include <atlstr.h>

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

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

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

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

  15.     return 0;
  16. }
复制代码


这个修改后的代码应该可以正常运行,并且没有参数错误。请注意,如果您在运行时遇到权限问题,您可能需要以管理员身份运行程序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-23 11:24:45 | 显示全部楼层    本楼为最佳答案   
您的代码有几个问题,导致了“参数错误”。以下是修复这些问题的方法:

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

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

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

  1. #include <windows.h>
  2. #include <tchar.h>
  3. #include <atlstr.h>

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

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

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

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

  15.     return 0;
  16. }
复制代码


这个修改后的代码应该可以正常运行,并且没有参数错误。请注意,如果您在运行时遇到权限问题,您可能需要以管理员身份运行程序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-23 11:42:36 | 显示全部楼层
我建议,问问题代码要给出一些注释,代码量少还好,代码量一大就没人给你慢慢看了,但这是一个好的习惯,至少要给出你写这段代码的目的,就这样丢出一段代码不是一个好的问问题的习惯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-23 13:24:14 | 显示全部楼层
非常感谢二楼和三楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-30 21:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表