2009-10-15 42 views
10

Một số người dùng đã báo cáo rằng nếu họ khởi chạy Excel bằng cách bấm đúp vào tệp Excel, trình bổ sung sẽ không tải. Tuy nhiên, nếu họ mở Excel thông qua menu Bắt đầu (hoặc thanh công cụ khởi động nhanh) thì trình bổ sung sẽ tải tốt.COM bổ trợ cho Excel không tải khi Excel được khởi chạy bằng cách mở tệp

Một số chi tiết, trong trường hợp họ giúp:

  • Nó là một COM add-in, viết bằng VB6.
  • Sự cố đã được báo cáo trên hệ thống Windows XP/Excel 2003 và Vista/Excel 2007.
  • Bổ trợ triển khai IDTExtensibility2.
  • Chế độ khởi động được đặt thành "Tải khi khởi động".

Bất kỳ suy nghĩ nào về nguyên nhân hoặc cách khắc phục sự cố này sẽ được đánh giá cao.

Cập nhật: Tôi tin rằng tôi đã tìm thấy giải pháp cho vấn đề này.

Khi đăng ký IDTExtensibility2, nó sẽ tự động tạo mục HKCU cho hành vi tải, tên bổ trợ, v.v. Nhưng tôi cũng đã có tệp thiết lập của tôi đăng ký bổ trợ vào HKLM, vì vậy nó sẽ có sẵn để tất cả người dùng trên máy. Điều này gây ra các mục đăng ký kép trên hệ thống.

Tôi không nghĩ rằng đây sẽ là nguyên nhân của sự cố. Tôi tự chỉnh sửa các mục HKCU và Excel dường như bỏ qua chúng và làm theo các mục HKLM. Tuy nhiên, tôi đã nhận được một mẹo từ một nhà phát triển khác giải thích rằng họ có cùng một vấn đề và giải pháp của họ là xóa các mục đăng ký trùng lặp. Tôi đã thử nó và nó dường như đã giải quyết vấn đề cho (rất ít người) đã báo cáo lỗi này.

Mã Inno Setup dưới đây sẽ thêm các mục HKLM, kiểm tra lại hành vi tải là chính xác (vì tôi hoang tưởng), sau đó xóa mục HKCU. Thay thế thuộc tính tệp của bạn bất cứ nơi nào bạn thấy TẤT CẢ CAPS.

[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; 

Đối với cài đặt MSI của tôi, tôi có cam kết phần của quá trình cài đặt gọi VBScript sau:

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 

Trả lời

3

Nó được một thời gian dài để bộ nhớ của tôi là sương mù, nhưng tôi nhớ lại vấn đề với nhận COM add-in để bắt đầu nếu máy chủ (Excel, Word) được bắt đầu như là một đối tượng nhúng. Tức là, bạn có một tài liệu Word với một tài liệu Excel được nhúng trong nó (bạn thực sự thấy các ô Excel có trong Word). Khi bạn bấm đúp vào tệp Excel được nhúng để làm việc với nó, Excel được bắt đầu, nhưng Excel không tải Bổ trợ COM của nó. Sau đó, khi bạn khởi động Excel theo bất kỳ cách nào khác, bạn thực sự chỉ sử dụng Excel đã/đang chạy từ đối tượng được nhúng và nó sẽ không có bổ trợ COM của bạn.

Điều đó dường như không phải là vấn đề của bạn nhưng tôi nghĩ bạn có thể thích một số thông cảm. ;)

Bạn có đang sử dụng Trình thiết kế bổ trợ trong VB6 không? Tôi đã không có vấn đề với nó, nhưng bạn cố gắng loại bỏ nó và thực hiện IDTExtensibility2 trực tiếp trong một lớp và sau đó viết các mục đăng ký của riêng bạn để đăng ký nó như là một COM add-in. Hoặc làm điều này trên đường khác xung quanh bạn không sử dụng nhà thiết kế.

Một điều cần thử là đăng ký bổ trợ làm bổ trợ toàn bộ máy, thay vì chỉ bổ trợ người dùng. Với nhà thiết kế, bạn chỉ có thể đăng ký làm người dùng bổ trợ. (Mặc dù có một công việc xung quanh cho điều đó).

Bạn có thể tái tạo không? Có bất kỳ phương pháp IDTExtensibility2 nào được gọi không?

Tôi cho rằng các ứng dụng bổ trợ khác có thể đang can thiệp. Bạn có thể tải tiện ích bổ sung COM của tôi để xem những gì bổ trợ được tải (cửa sổ bổ trợ COM trong ứng dụng Office chỉ hiển thị cho bạn bổ trợ người dùng, không phải máy bổ trợ.)

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

Nếu trình bổ sung hoàn toàn dừng tải, ứng dụng Office có thể đã tắt tính năng này. Chuyển đến trợ giúp | Giới thiệu | Các mục bị vô hiệu hóa và xem nó có ở đó không.

Excel có một số tùy chọn ngốc nghếch liên quan đến DDE (đó là những gì Explorer sử dụng để mở tài liệu trong các ứng dụng khác thường.) Công cụ | Tùy chọn | Chung | Bỏ qua các ứng dụng khác. Xem nếu điều đó tạo ra sự khác biệt.

Nếu bạn không thể tái tạo sự cố, nhưng khách hàng của bạn có thể viết một phiên bản đặc biệt cho họ ghi lại sự kiện IDT ... để xem họ có đang xảy ra hay không. Gửi cho họ một macro để kiểm tra Excel.Application.Addins để xem nếu bạn add-in là có (Tôi biết Word có mô hình đối tượng, không chắc chắn về Excel để tha thứ cho tôi nếu nó không).

Hy vọng đó là một số trợ giúp.

-Tom

+0

@ Tom: Bạn đã quản lý để tìm ra các vấn đề khi Excel được nhúng vào trong các ứng dụng khác? Tôi đang gặp vấn đề tương tự, nơi add add COM của tôi (thêm thanh điều khiển của riêng nó vào Excel) nhưng lệnh thêm không thể được tùy chỉnh (các nút được bật/tắt) ngoại trừ trong phương thức OnConnection(). – A9S6

+0

Xin lỗi, không. Đây không thực sự là một vấn đề lớn đối với tôi. Tôi đã có thể nói với mọi người "đừng làm thế". ;) Hoặc đóng cả hai ứng dụng và bắt đầu chúng theo đúng thứ tự. Tôi không chắc bạn có thể làm gì. Có vẻ như một lỗi trong ứng dụng Office. –

+0

cảm ơn phản hồi. Bạn đã có một số ý tưởng và nhận xét tuyệt vời. – CtrlDot

3

Rất dễ dàng trong 5 bước

  1. mở Excel
  2. Đến File> Options> Add-Ins
  3. Đến Quản lý: sau đó chọn Disabled Các mục rồi nhấp vào Đi
  4. Trong cửa sổ mới Tìm add-ins của bạn và nhấp Enable
  5. Khởi động lại Excel
Các vấn đề liên quan