2013-04-26 117 views
0

我試圖簡單地啓動一個應用程序使用下面的函數,但它dosent似乎正常工作。它不會從桌面啓動我的測試應用程序,但是當我將它移動到「下載」中的子文件夾時,它工作正常。我拉從配置文件的目錄信息,並考慮到我可以從一個單獨的文件夾啓動測試應用程序,我懷疑它與我的目錄信息有任何關係。CreateProcess()沒有正確啓動進程

bool StartTest(){ 
    char WOW_PATH[MAX_PATH]; 
    char WOW_PATH_FULL[MAX_PATH]; 
    STARTUPINFO SUI; 
    PROCESS_INFORMATION PROCINFO; 

    SUI.cb   = sizeof(STARTUPINFO); 
    SUI.lpReserved = 0; 
    SUI.lpTitle  = 0; 
    SUI.dwFlags  = STARTF_RUNFULLSCREEN; 
    SUI.wShowWindow = SW_SHOW; 
    SUI.cbReserved2 = 0; 
    SUI.lpReserved2 = 0; 

    ZeroMemory(&PROCINFO,sizeof(PROCINFO)); 

    ifstream File; 
    File.open("config.txt"); 
    File.getline(WOW_PATH,MAX_PATH); 
    File.close(); 

    strcpy(WOW_PATH_FULL,WOW_PATH); 

    strcpy(WOW_PATH_FULL,"\Test.exe"); 

    if(!CreateProcess(WOW_PATH_FULL,0,0,0,false,0,0,WOW_PATH,&SUI,&PROCINFO)) 
     return 0; 

    CloseHandle(PROCINFO.hProcess); 
    CloseHandle(PROCINFO.hThread); 

    return 1; 
} 
+2

也許你能告訴我們的日誌什麼WOW_PATH_FULL'的'的精確值是兩個工作和失敗的例子。另外,GetLastError()會說什麼? – 2013-04-26 02:15:16

+1

否'GetLastError'信息?在詢問之前試着找出什麼是錯的。 – 2013-04-26 02:23:55

回答

3

我懷疑以下行需要有反斜槓轉義。第二個調用需要是strcat,而不是strcpy。

strcpy(WOW_PATH_FULL,WOW_PATH); 
strcpy(WOW_PATH_FULL,"\Test.exe"); 

這裏的修復:

strcpy(WOW_PATH_FULL,WOW_PATH); 
strcat(WOW_PATH_FULL,"\\Test.exe"); 
+1

另外,請查看Win32幫助函數,PathAppend或其派生之一。它會自動爲您處理反斜槓。 http://msdn.microsoft.com/en-us/library/windows/desktop/bb773565%28v=vs.85%29.aspx – selbie 2013-04-26 02:31:41

+0

或者只是使用'/' - Windows作爲路徑分隔符是完全正確的。 – 2013-04-26 02:39:18

+0

另外 - 我不知道爲什麼當使用「子文件夾在下載」它的工作? – 2013-04-26 02:41:44

相關問題