Kilku użytkowników zgłosiło, że jeśli uruchomią program Excel, klikając dwukrotnie plik Excel, dodatek nie zostanie załadowany. Ale jeśli otwierają Excela za pomocą menu Start (lub paska narzędzi szybkiego uruchamiania), dodatek ładuje się poprawnie.Dodatek COM dla programu Excel nie jest ładowany po uruchomieniu programu Excel przez otwarcie pliku
Niektóre szczegóły, w przypadku gdy pomoc:
- Jest to dodatek COM, napisane w VB6.
- Problem został zgłoszony w systemach Windows XP/Excel 2003 i Vista/Excel 2007.
- Dodatek implementuje IDTExtensibility2.
- Tryb startu jest ustawiony na "Load on Startup".
Wszelkie przemyślenia na temat przyczyny lub sposobu rozwiązania tego problemu byłyby bardzo mile widziane.
Aktualizacja: Uważam, że znalazłem rozwiązanie tego problemu.
Po zarejestrowaniu biblioteki dll IDTExtensibility2, automatycznie tworzy ona wpisy HKCU dla zachowania obciążenia, nazwy dodatków itp. Ale miałem również mój plik instalacyjny zarejestrować dodatek do HKLM, tak aby był dostępny dla wszyscy użytkownicy na komputerze. Spowodowało to podwójne wpisy rejestru w systemie.
Nie sądziłem, że to będzie przyczyną problemu. Ręcznie edytowałem wpisy HKCU, a Excel wydawał się ignorować je i postępować zgodnie z wpisami HKLM. Otrzymałem jednak od innego programisty wskazówkę, że mają ten sam problem, a ich rozwiązaniem było usunięcie zduplikowanych wpisów w rejestrze. Próbowałem go i wydaje się, że rozwiązał problem dla (bardzo małej liczby) osób, które zgłosiły błąd.
Poniższy kod konfiguracji Inno doda wpisy HKLM, dwukrotnie sprawdzi, czy zachowanie obciążenia jest prawidłowe (ponieważ jestem paranoikiem), a następnie usuń wpis HKCU. Zmień swoje atrybuty plików wszędzie tam, gdzie zobaczysz WSZYSTKIE KAPUŁY.
[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;
Dla mojego instalatora MSI, mam sekcję popełnienia instalacji wywołać następujący 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
@Tom: Czy udało ci się dowiedzieć się problem, gdy Excel jest osadzony w innej aplikacji? Mam taki sam problem, gdy mój dodatek COM (który dodaje swój własny pasek poleceń do programu Excel) ładuje się, ale dodany pasek poleceń nie może być dostosowany (przyciski włączone/wyłączone) z wyjątkiem metody OnConnection(). – A9S6
Niestety, nie. To nie było dla mnie ważne. Byłem w stanie powiedzieć ludziom "nie rób tego". ;) Lub zamknij obie aplikacje i uruchom je we właściwej kolejności. Nie jestem pewien, czy możesz coś zrobić. Wygląda jak błąd w aplikacjach Office. –
dzięki za odpowiedź. Miałeś świetne pomysły i komentarze. – CtrlDot