2013-05-08 30 views
2

我的加載項是用c#,NetOffice,ExcelDNA使用WPFframework編寫的。有些部分也使用winforms。 主UI是WPF如何禁止Excel強制關閉時禁用加載項對話框

當有顯示一個模式對話框,用戶強行關閉Excel。 下一次當他們啓動Excel時,Excel會說:「Excel的經歷與‘*’加載項。如果你已經多次看到此消息時,應禁用此add0in和checke以查看是否有更新是一個嚴重的問題可用。是否要禁用此加載項?「

是,否

用戶通常單擊Yes或沒有閱讀的消息,然後我加載從Excel中消失進入。 所以我不想讓這個對話框出現。這是可能的和如何?感謝

我試圖抓住在所有的AutoOpen異常()像下面。但是,根本沒有任何效果停止對話。

public void AutoOpen() 
    {   
..... 
      System.Windows.Forms.Application.ThreadException += ApplicationOnThreadException; 
      AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException; 
      Dispatcher.CurrentDispatcher.UnhandledException += CurrentDispatcher_UnhandledException; 
      TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException; 
.... 
    } 


    public void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e) 
    { 
     Helper.LogError(e.Exception);    
    } 

    public void ApplicationOnThreadException(object sender, ThreadExceptionEventArgs threadExceptionEventArgs) 
    { 
     Helper.LogError(threadExceptionEventArgs.Exception); 
    } 

    public void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs args) 
    { 
     if (!(args.ExceptionObject is ThreadAbortException)) 
     { 
      Exception exc = args.ExceptionObject as Exception;    
      Helper.LogError(exc); 
     }   
    } 

    public void CurrentDispatcher_UnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) 
    { 
     Helper.LogError(e.Exception); 
     e.Handled = true; 
    } 

回答

2

我假設'用戶強制關閉Excel',您的意思是用戶從任務管理器或其他東西結束Excel進程。

Excel將一些內部警衛置於功能區處理程序調用周圍,以便如果Excel在Ribbon事件處理程序期間崩潰,Excel會知道發生崩潰時調用哪個加載項,以便在您下次描述時禁用該功能。因此,如果Excel在顯示模態對話框時意外終止,那麼您的加載項就是被記住爲「原因」的那個。

你在處理未處理的異常嘗試是不可能奏效,因爲.NET是(在Excel)本機進程主持。因此,無法處理的異常會導致Excel無法返回到.NET運行時,但很可能會導致整個Excel進程崩潰。所以試圖處理更多的例外情況不太可能有所幫助。

也許模態對話框是不正確的做法,因爲它會導致你的用戶感到困惑,並認爲Excel中已經崩潰,造成意外終止。至少確保將Excel窗口設置爲模式對話框的父窗口,以便對話框保持在Excel之前。

+0

謝謝。是的,用戶在任務管理器中關閉Excel,右鍵單擊Excel圖標並關閉狀態欄中的所有窗口。當從Web服務獲取數據時,My addin會顯示一個模式對話框,其中有一個「取消」按鈕。如果用戶想要取消,他們可以點擊按鈕。如果他們不取消,對話窗口將在Excel之前,直到數據獲取完成。我正在使用WPF,窗口的父是隻讀的。我從功能區單擊事件處理程序調用它的ShowDialog。所以我不知道如何將其父母設置爲Excel。 – toosensitive 2013-05-09 17:38:58

+0

我注意到myadd被禁用時。 myadd com助手被放在disabledItems中。 myadd.xll仍處於活動列表中。所以我想知道是否有一種方法可以在AutoOpen中加載/生成myadd com助手?謝謝 – toosensitive 2013-05-09 21:31:29

+0

您可以嘗試找出註冊表中禁用項目的記錄位置,然後從AutoOpen中刪除這些註冊表項。一個地方可能是這樣的:HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 14.0 \ Excel \ Resiliency \ DisabledItems – Govert 2013-05-10 06:46:40