2009-06-12 128 views
3

我在另一個大陸上的Windows XP計算機上有一個程序。如果我通過雙擊關聯文件來啓動它,以便它根據文件類型關聯運行程序,它會在某個點崩潰。如果我通過將關聯文件拖動到程序圖標來啓動它,它可以正常工作。如果我雙擊圖標並將關聯的文件拖動到窗口,它可以正常工作。Windows程序調用有什麼區別?

在現場的人告訴我說,他是三重檢查的文件類型關聯,它應該是正確的。

假設圖標指向同一個可執行文件註冊表,有什麼不同會有在開始這兩種不同方式的程序?

編輯:在迴應評論,我有在日本運行的問題,而我的正常的機器是美國英語的機器。

+0

這是對Windows的不同本地化(本地化版本可能具有不同的標準路徑名稱,如「C:\ Program Files」與德語中的「C:\ Program」)?如果區域設置設置爲相同的區域,它是否工作? – 2009-06-12 22:19:49

回答

3

一個可能的區別是初始工作目錄:如果您拖動文件到可執行文件,初始工作目錄設置爲包含可執行文件的目錄,而如果您雙擊該文件,初始工作目錄設置爲一些默認值與文件或可執行文件的位置無關。

如果你想在所有情況下一致的行爲,你可以使用SetCurrentDirectory()設置當前工作目錄到任何你想要的;我推薦包含可執行文件的目錄,可通過調用GetModuleFileName(NULL, ...)並刪除可執行文件名,或通過檢查main()中的argv[0]來找到該目錄。

1

當您雙擊該文件,運行程序,和(通常)在你雙擊,在該程序作爲命令行參數傳遞的文件的名稱。

當你拖到窗口上時,程序已經在運行。

顯然,在程序啓動過程中有所不同。這個軟件是內部編寫的嗎?也許檢查它如何處理啓動,並確保當命令行參數中有文件時,仍然執行所有適當的代碼路徑。

如果你不能檢查程序代碼,或者它在啓動時是如何運行的,關於在註冊表中檢查唯一的東西,並且可能改變,就是如何傳入文件名。通常它們被傳入內部通話標記,以便文件的路徑可以有空格而不會混淆程序。要嘗試的一件事就是確保該關聯在參數上使用說話標記,或者如果已經存在,則嘗試不帶。也許該程序沒有正確處理說話標記。

相關問題