2011-10-26 54 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',not'static void main'。 –

回答

3

您需要將STARTUPINFO清零。

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

嘗試過,但它仍然是相同的,沒有過程,只是錯誤 –

+0

搞明白了。我不得不顛倒前兩個參數(不知道爲什麼),但它現在起作用。謝謝。會將您的答案標記爲正確答案,因爲如果沒有您的建議,該方案也不會奏效。 –

+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");