2011-06-10 30 views
6

我使用ShellExecute打開文件。在2000多個用戶中的一臺機器上,我無法打開文檔文件。用寫字板打開docx。向ShellExecute傳遞'open'不會在特定機器上打開一個word文件

Word 2010已正確安裝,並且從資源管理器雙擊文字文件,正確打開單詞,而且文檔正在瀏覽器中顯示正確的圖標。請注意,所有其他文件工作正常(如xls,xlsx,pdf,...)

有誰知道爲什麼?我checekd和「使用此應用程序打開文件」它被檢查。

在代碼我檢查錯誤,我知道該錯誤消息是

SE_ERR_ASSOCINCOMPLETESE_ERR_NOASSOC

(監守在這兩種情況下我顯示「沒有appliaction與文件類型相關聯的」錯誤,所以我不知道哪些錯誤存在,我在客戶端調試以查看它,但在這種情況下,我認爲它不是那麼重要)。

有沒有人有想法?這是我用它來打開文件:

ShellExecute(0, 'open', PWideChar(MyFilePath), '', '', SW_SHOWNORMAL); 

注:在我看來有些像問題是有在Windows註冊表這臺機器,它是一個幾乎全新的Windows 7機器。

注意誰在投票中關閉這個問題作爲Off Topic:它實際上是WinAPI上的一個問題:爲什麼這個api不能像預期的那樣工作在Explorer中呢?所以這不是主題,尤其是winapi在標籤中。

+0

關於你的編輯,winapi只在標籤中,因爲我編輯它們並擺脫了無用的Delphi標籤。但我認爲這可能更像是一個特定機器的問題,而不是一個編碼問題,因此脫離主題,轉向超級用戶收票。 – 2011-06-10 19:13:36

+0

@David,是的,我知道你已經被重製了,但是我更容易說「expecially winapi在標籤中」,然後「特別是winapi在標籤中,即使我原來並沒有添加它,它是由David編輯完成的Heffeman」。 :) – LaBracca 2011-06-13 07:55:19

回答

5

這只是一個猜測,但我懷疑資源管理器在你有「打開」的地方使用NULL。如果用戶的註冊文件關聯中存在任何錯誤,這可能會觸發細微的不同行爲。例如,如果有一個默認動詞,而不是「打開」。

+0

難道它不是通常的另一種方式嗎? – 2011-06-10 19:54:25

+1

@David:指定'NULL'告訴'ShellExecute()'調用默認的註冊動詞,如果不存在則回退到'「open」,如果不存在則回退到第一個。大多數遺留代碼使用硬編碼的「打開」,因爲它曾經是典型的默認動詞。現在這種情況並不常見,所以最好現在使用NULL,讓操作系統決定調用哪個動詞。 – 2011-06-10 21:00:09

+0

Word似乎不太可能註冊公開動詞 – 2011-06-10 22:26:54

相關問題