0

这是我的代码。我总是收到错误 3,我该怎么办?我试图用 CreateProcessA 替换 CreateProcces,替换前两个参数,尝试处理其他程序,但它仍然不起作用。谢谢。

  #include "windows.h"
  #include <iostream>

  void main() {

     STARTUPINFOA cif;
     ZeroMemory(&cif,sizeof(cif));
     PROCESS_INFORMATION pi;
     CreateProcessA("","C:\\Windows\\notepad.exe",NULL,NULL, NULL,NULL,NULL,NULL,&cif,&pi);

     DWORD error=GetLastError();
     std::cout << "error " << error << "\n";
     while(1) {}        // подождать
 }

是的,你是对的。我已经更正了,但它仍然返回错误代码3。首先,notepad.exe没有执行,其次,getlasteeror返回代码错误3,我做错了什么?

我放置:

      char* path="C:\\Windows\\notepad.exe";
      CreateProcessA(path,"sfvfd",NULL,NULL,NULL,NULL,NULL,NULL,&cif,&pi);

而不是(并且它有效!):

      CreateProcessA("","C:\\Windows\\notepad.exe",NULL,NULL,            
      NULL,NULL,NULL,NULL,&cif,&pi);

有什么不同?

4

2 回答 2

3

如果您仔细阅读,它在 MSDN 上有很好的记录:

第一个论点lpApplicationName

要执行的模块的名称。[...]

lpApplicationName 参数可以为 NULL。在这种情况下,模块名称必须是 lpCommandLine 字符串中第一个以空格分隔的标记。[...]

无论出于何种原因,您都不想将要执行的模块名称放入第一个参数中。如果您随后将NULL其作为参数传递,则可以。

但是,您将非NULL指针传递给空字符串。因此 API 不会选择您的记事本路径,而是尝试运行一个空字符串。

Nence, 3= ERROR_PATH_NOT_FOUND"系统找不到指定的路径。"

于 2013-05-12T12:08:13.327 回答
1

从 MSDN 示例中尝试此代码

#include <windows.h>
#include <stdio.h>


void main()
{  
  STARTUPINFOA si;
  PROCESS_INFORMATION pi;

  ZeroMemory( &si, sizeof(si) );
  si.cb = sizeof(si);
  ZeroMemory( &pi, sizeof(pi) );

  // Start the child process. 
  if(!CreateProcessA( NULL,     // No module name (use command line)
    "C:\\Windows\\notepad.exe", // Command line
    NULL,           // Process handle not inheritable
    NULL,           // Thread handle not inheritable
    FALSE,          // Set handle inheritance to FALSE
    0,              // No creation flags
    NULL,           // Use parent's environment block
    NULL,           // Use parent's starting directory 
    &si,            // Pointer to STARTUPINFO structure
    &pi )           // Pointer to PROCESS_INFORMATION structure
    ) 
  {
    printf( "CreateProcess failed (%d).\n", GetLastError() );
    return;
  }

  // Wait until child process exits.
  WaitForSingleObject( pi.hProcess, INFINITE );

  // Close process and thread handles. 
  CloseHandle( pi.hProcess );
  CloseHandle( pi.hThread );
于 2013-05-12T11:56:57.950 回答