0

これが私のコードです。常にエラー 3 が表示されます。どうすればよいですか? CreateProcces を CreateProcessA に置き換え、最初の 2 つのパラメーターを置き換え、他のプログラムを処理しようとしましたが、まだ機能しません。ありがとうございます。

  #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引数として渡せばOKです。

ただし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 に答える