2010-11-01 115 views
2

我正在修改一個開源GUI(用c編寫)來向托盤應用添加一個新的菜單項。新菜單項在c:\ program files目錄中的程序根目錄下執行一個文件(update.exe)。我使用shellexec()並且它在x86上工作正常,但由於x64-c:\ program files(x86)上的路徑不同,所以無法加載。我想用一些像%programfiles%這樣的環境變量的效果。什麼是這個優雅的解決方案?shellexec和c: program files - x86和x64的可移植性

或者,我確實有能力更改u​​pdate.exe文件的存儲位置。把它放在'程序文件'中似乎是最合乎邏輯的。對於上面的問題,它應該超出程序文件嗎?如果是這樣的話?

+0

這是自動的與文件系統重定向爲32位應用程序。嘗試診斷「無法加載」更好。 – 2010-11-01 17:34:20

+0

在x64上,被調用的應用程序根本不會加載,我假設因爲由於路徑不同而無法找到它。如果發生文件重定向,則失敗。 – Michelle 2010-11-01 17:35:48

回答

1

您可以使用GetModuleFileName()來檢索可執行文件的完整路徑。然後你只需要從最後剪下文件名,就可以擁有完整的目錄路徑。

像這樣的東西應該給招:

TCHAR szPath[MAX_PATH]; 
LPTSTR szFileName; 

GetModuleFileName(g_hInstance, szPath, sizeof(szPath)/sizeof(TCHAR)); 
szFileName = _tcsrchr(szPath, TEXT("\\")); 
*szFileName = TEXT('\0'); 

// szPath now contains the path 

(警告未經測試!)

+0

但是,如果程序的目錄是程序文件(x86),系統會重新映射它以騙你並說「程序文件」。現在,您可以說在啓動任何命令提示之前,可以將SetCurrentDirectory設置爲程序的目錄... – asveikau 2010-11-01 17:47:37

相關問題