2009-10-15 74 views
10

多位用戶報告,如果他們通過雙擊Excel文件啓動Excel,將無法加載加載項。但是,如果他們通過開始菜單(或快速啓動工具欄)打開Excel,則加載項可以正常加載。通過打開文件啓動Excel時,Excel加載項無法加載

一些細節,萬一他們幫助:

  • 這是一個COM加載項,寫在VB6。
  • 在Windows XP/Excel 2003和Vista/Excel 2007系統中報告了此問題。
  • 加載項實現IDTExtensibility2。
  • 啓動模式設置爲「啓動時加載」。

任何想法的原因或如何解決這個問題將不勝感激。

更新:我相信我已經找到了解決這個問題的辦法。

當一個IDTExtensibility2 dll被註冊時,它會自動爲加載行爲,加載項名稱等創建HKCU條目。但是我也有我的設置文件在HKLM中註冊加載項,以便它可用於一臺機器上的所有用戶。這導致了系統上的雙重註冊表項。

我不認爲這將是問題的原因。我手動編輯了HKCU的條目,而Excel似乎忽略了它們並遵循了HKLM條目。但是,我收到了另一位開發人員的提示,說明他們遇到了同樣的問題,他們的解決方案是刪除重複的註冊表項。我嘗試了它,似乎已經解決了報告該錯誤的(極少數)人的問題。

下面的Inno設置代碼將添加HKLM條目,仔細檢查加載行爲是否正確(因爲我是偏執狂),然後刪除HKCU條目。將您的文件屬性置於您看到的所有位置。

[Registry] 
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; Flags: uninsdeletekey 
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: string; ValueName: FriendlyName; ValueData: ADDIN_NAME 
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: string; ValueName: Description; ValueData: ADDIN_DESC 
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: dword; ValueName: LoadBehavior; ValueData: 3 
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: dword; ValueName: CommandLineSafe; ValueData: 0 


// Set load behavior to on start up 
procedure ResetAddinRegKeys(); 
var 
    bUpdate : Boolean; 
    LoadBehaviorKey : Cardinal; 

begin 
    if RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS', 'LoadBehavior', LoadBehaviorKey) then begin 
    if LoadBehaviorKey <> 3 then begin 
     bUpdate := True; 
    end; 
    end else begin 
    bUpdate := True; 
    end; 

    if bUpdate = True then begin 
    RegWriteDWordValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS','LoadBehavior', 3); 
    end; 

    if RegKeyExists(HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS') then begin 
    if RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS') then begin; 
     //MsgBox('Duplicate keys deleted', mbInformation, MB_OK); 
    end; 
    end; 
end; 

function GetCustomSetupExitCode: Integer; 
begin 
    ResetAddinRegKeys; 
    Result := 0; 
end; 

對於我的MSI安裝程序,我安裝的提交區間調用下面的VBScript:

Sub RemoveAddinHKCUKeys() 
    On Error Resume Next 
    Dim WshShell 
    Set WshShell = WScript.CreateObject("WScript.Shell") 

    WshShell.RegDelete "HKCU\SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS\CommandLineSafe" 
    WshShell.RegDelete "HKCU\SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS\Description" 
    WshShell.RegDelete "HKCU\SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS\FriendlyName" 
    WshShell.RegDelete "HKCU\SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS\LoadBehavior" 
    WshShell.RegDelete "HKCU\SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS\" 

    If Err.Number <> 0 The Err.Clear 
End Sub 

回答

3

這是一個漫長的時間,所以我的記憶中是雲裏霧裏,但我不記得有越來越問題如果主機(Excel,Word)作爲嵌入對象啓動,則需要啓動COM加載項。也就是說,你有一個嵌入了Excel文檔的Word文檔(實際上你可以在Word中看到Excel單元格)。當您雙擊嵌入的Excel文件以使用它時,Excel將啓動,但Excel不會加載它的COM加載項。然後,當您以任何其他方式啓動Excel時,您實際上只是使用已經從嵌入對象運行的Excel,並且它不會擁有您的COM加載項。

這似乎不是你的問題,但我想你可能會喜歡一些同情。 ;)

您是否在使用VB6中的加載項設計器?我沒有遇到任何問題,但是您可以嘗試將其廢棄並直接在類中實現IDTExtensibility2,然後編寫自己的註冊表項以將其註冊爲COM加載項。或者在你周圍的其他地方做這個,而不是使用設計師。

要做的一件事就是將加載項註冊爲全機加載項,而不僅僅是用戶加載項。有了設計師,您只能註冊爲用戶加載項。 (雖然有這方面的工作)。

你能重現嗎?是否有任何IDTExtensibility2方法被調用?

我想可能是其他加載項可能會產生干擾。您可以下載我的COM加載項實用程序以查看加載的加載項(Office應用程序中的COM加載項窗口僅向您顯示用戶加載項,而不是機器加載項)。

http://www.amosfivesix.com/download/stackoverflow/

如果加載項完全停止加載,Office應用程序可能已禁用它。轉到幫助|關於|禁用的項目,看看它是否存在。

Excel有一些與DDE相關的愚蠢選項(這是Explorer用來在其他應用程序中通常打開文檔的工具。選項|一般|忽略其他應用程序。看看這是否有所作爲。

如果你不能重現問題,但你的客戶可以,你可以爲他們編寫一個特殊的版本,記錄IDT ...事件,看他們是否正在發生。向他們發送一個宏,檢查Excel.Application.Addins,看看你的加載項是否存在(我知道Word有這個對象模型,不確定Excel是否如此原諒我,如果沒有)。

希望這是一些幫助。

-Tom

+0

@湯姆:你管理當Excel嵌入在其它應用弄清楚這個問題?我遇到了同樣的問題,我的COM插件(它將自己的命令條添加到Excel)加載,但添加的命令條不能定製(按鈕啓用/禁用),除了OnConnection()方法。 – A9S6 2009-12-07 19:21:59

+0

對不起,沒有。這對我來說並不是什麼大不了的事情。我能夠告訴人們「不要這樣做」。 ;)或關閉這兩個應用程序並按正確的順序啓動它們。我不確定你有什麼可以做的。看起來像Office應用程序中的錯誤。 – 2009-12-10 16:40:34

+0

感謝您的回覆。你有一些很棒的想法和評論。 – CtrlDot 2010-03-29 10:13:36

3

很容易在5個步驟

  1. 打開Excel
  2. 轉到文件>選項>加載項
  3. 轉到管理:然後選擇殘疾人項目然後點擊轉到
  4. 在新窗口中找到您的加載項並單擊啓用
  5. 重新啓動Excel