Posted on 2010-03-16 11:10
亂78糟 閱讀(3635)
評論(0) 編輯 收藏 引用 所屬分類:
C語言派系
ShellExecute和ShellExecuteEx函數(shù)主要用于執(zhí)行應(yīng)用程序,它們可以接收一個(gè)文件名并能自動(dòng)獲得同文件名相關(guān)的可執(zhí)行文件名。此
外,它們還支持系統(tǒng)安全認(rèn)證。如果在NT上設(shè)定了用戶的可執(zhí)行權(quán)限,ShellExecute和ShellExecuteEx函數(shù)將會(huì)在創(chuàng)建新的進(jìn)程前檢查權(quán)限CreateProcess和WinExec函數(shù)則沒有這項(xiàng)功能)。函數(shù)調(diào)用的流程如下:
- 獲得將要執(zhí)行的程序名,例如test.exe。
- 根據(jù)程序名檢查用戶權(quán)限,如果該用戶無權(quán)操作,拒絕之。
- 激活全部已注冊的IshellExecuteHook擴(kuò)展。
- 當(dāng)所有擴(kuò)展和權(quán)限都同意執(zhí)行,準(zhǔn)備創(chuàng)建新的進(jìn)程。
- 在注冊表中查詢程序,查找路徑為:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\windows\CurrentVersion\App Paths\程序名,在該項(xiàng)下找程序的啟動(dòng)路徑,如果找到,啟動(dòng)并返回;如果沒找到,進(jìn)入步驟6。
- 根據(jù)ShellExecute的設(shè)置的目錄參數(shù)查找,如果存在程序,啟動(dòng)并返回;否則返回失敗。
步驟5和6是我再查找一個(gè)程序運(yùn)行錯(cuò)誤時(shí)發(fā)現(xiàn)的。
原來程序之前安裝過一次,后來更改啟動(dòng)策略,不再獨(dú)立安裝而采用綠色包,結(jié)果程序中用ShellExecute啟動(dòng)程序時(shí)不對,查找分析之后發(fā)現(xiàn)是調(diào)用了錯(cuò)誤的程序,卸載之前安裝的就正常了。
誤打誤撞,盡然發(fā)現(xiàn)之前對這兩個(gè)函數(shù)理解太過膚淺,網(wǎng)上查了查,發(fā)現(xiàn)都沒有人介紹,我這里再補(bǔ)充我發(fā)現(xiàn)的2點(diǎn),告誡自己以后不到萬不得已,不要使用這兩個(gè)函數(shù)啟動(dòng)自己的應(yīng)用程序。