多位用戶報告,如果他們通過雙擊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
@湯姆:你管理當Excel嵌入在其它應用弄清楚這個問題?我遇到了同樣的問題,我的COM插件(它將自己的命令條添加到Excel)加載,但添加的命令條不能定製(按鈕啓用/禁用),除了OnConnection()方法。 – A9S6 2009-12-07 19:21:59
對不起,沒有。這對我來說並不是什麼大不了的事情。我能夠告訴人們「不要這樣做」。 ;)或關閉這兩個應用程序並按正確的順序啓動它們。我不確定你有什麼可以做的。看起來像Office應用程序中的錯誤。 – 2009-12-10 16:40:34
感謝您的回覆。你有一些很棒的想法和評論。 – CtrlDot 2010-03-29 10:13:36