CreateProcess方法遇到错误问题。

6
我有一个问题需要解决,涉及到以下代码:
int main(int argc, char **argv) {
  PROCESS_INFORMATION pi;  
  STARTUPINFO si;     

  printf("Process %d reporting for duty\n",GetCurrentProcessId());
  GetStartupInfo(&si);
  CreateProcess(NULL,"notepad.exe", NULL,NULL,FALSE,DETACHED_PROCESS, NULL,NULL, &si, &pi);
  printf("New Process ID: %d\n",pi.dwProcessId);
  return(0);
}        

在运行时,我在调试时遇到了问题,它在CreateProcess方法上崩溃,并显示以下错误信息:"Unhandled exception at 0x7c82f29c in Tests.exe: 0xC0000005: Access violation writing location 0x00415760." 这是什么意思?

1个回答

8
32位可执行文件的基址通常为0x00400000。根据异常,不能写入的地址是0x00415760。这意味着您的代码几乎肯定试图写入可执行映像的只读部分。例如,当您尝试写入字符串字面量时会发生这种情况。
现在,CreateProcess的第二个参数必须是可修改的内存(声明为LPTSTR)。但是您正在传递一个字符串字面量。将"notepad.exe"放入可修改的缓冲区中以解决问题。
char CommandLine[] = "notepad.exe";
CreateProcess(NULL, CommandLine, ...

还有一个小问题...假设我有一个包含一些方法的.c文件,并创建了一个新项目,需要制作一个使用来自先前项目的方法的进程...所有这些都在同一个解决方案下。 所以,我想“CommandLine”参数将代表第一个程序创建的.exe文件(我需要使用其中的方法)。 现在我在发布之前的代码文件中,如何访问这些方法并使用它们? - Inbali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接