當(dāng)在CFileDialog中選擇文件后,如果程序和所選文件不在同一路徑,可能會(huì)導(dǎo)致CreateProcess函數(shù)因找不到對(duì)應(yīng)程序而返回錯(cuò)誤代碼2。解決這個(gè)問題的關(guān)鍵在于使用CreateProcess的絕對(duì)路徑而非相對(duì)路徑。具體來說,參數(shù)lpApplicationName應(yīng)包含可執(zhí)行文件的完整路徑,無論它是絕對(duì)路徑還是相對(duì)于當(dāng)前工作目錄的路徑。
CreateProcess函數(shù)接受的參數(shù)中,lpApplicationName特別關(guān)鍵,它指定了要運(yùn)行的可執(zhí)行模塊的路徑。這個(gè)路徑可以是絕對(duì)路徑,這樣無論程序位置如何,函數(shù)都能正確定位到它。如果設(shè)置為相對(duì)路徑,需要確保程序運(yùn)行時(shí)的當(dāng)前目錄已知,否則可能會(huì)導(dǎo)致路徑解析錯(cuò)誤。
lpCommandLine參數(shù)用來指定命令行參數(shù),可以為空,此時(shí)lpApplicationName會(huì)被當(dāng)作命令行來執(zhí)行。如果兩者都包含,lpApplicationName是程序名,lpCommandLine是傳遞給程序的參數(shù)。
另外,lpProcessAttributes和lpThreadAttributes是用于控制新進(jìn)程和線程屬性的,如是否允許句柄繼承。它們通常設(shè)置為NULL,以使用默認(rèn)設(shè)置。
綜上所述,為確保CreateProcess的成功執(zhí)行,務(wù)必提供準(zhǔn)確的可執(zhí)行文件絕對(duì)路徑,避免因路徑問題引發(fā)的錯(cuò)誤代碼2。