2011-10-26 5 views
0

C++(VC++コンソールアプリケーション)で次のコードが動作するのに問題があります。単にプロセスを作成するのではなく、エラーテキストを出力します。CreateProcessが機能しない

static void main(){ 
    char *hotkeyexe = "cmd"; 
    PROCESS_INFORMATION pi; 
    STARTUPINFO si; 

    if(!CreateProcess(hotkeyexe, "", 0, 0, 0, 0, 0, 0, &si, &pi)) 
     printf("error"); 
     scanf("%d"); 
    } 
} 
+3

'int main'ではなく' static void main'です。 –

答えて

3

STARTUPINFOをゼロにする必要があります。

ZeroMemory(&si, sizeof(si)); 
+0

はそれを試しましたが、それはまだ同じで、プロセスはありません。ちょうどエラー –

+0

が分かっています。最初の2つのパラメータを逆にしなければなりませんでしたが(理由は分かりません)、今は動作します。ありがとう。あなたの提案がなければ、そのプログラムもうまくいきませんでしたので、あなたの答えを正しいものとしてマークします。 –

+0

すべての警告をオンにしてコンパイルします。 「疑わしいポインタ変換」は、通常、死んでいます。 – Joshua

1

私はMSDNから引用:

関数は検索パスを使用しません。このパラメータには、ファイル名の拡張子を含める必要があります。デフォルトの拡張は想定されていません。

だから、単にcmdを使うことはできません。それが動作する場合は、あなたの作業ディレクトリに依存します。完全なパスを使用するとうまくいきます。たとえば、これは私のマシン上で動作する例です。

char *hotkeyexe = "c:\\Windows\\notepad.exe"; 
PROCESS_INFORMATION pi; 
STARTUPINFO si; 
ZeroMemory(&si, sizeof(si)); 

if(!CreateProcess(hotkeyexe, "", 0, 0, 0, 0, 0, 0, &si, &pi)) 
    printf("error"); 
scanf("%d"); 
関連する問題