2013-05-08 1 views
2

내 추가 기능은 WPFframework를 사용하여 C#, NetOffice, ExcelDNA로 작성되었습니다. 일부는 winforms도 사용합니다. 기본 UI는 WP30입니다엑셀 강제 종료시 Add-in 대화 상자 사용 안 함

모달 대화 상자가 표시되면 사용자가 Excel을 닫아야합니다. 다음 번 Excel에서 Excel을 실행하면 Excel에서 "Excel에서 '*'추가 기능에 심각한 문제가 발생했습니다.이 메시지가 여러 번 표시되면이 add0in 및 checke를 해제하여 업데이트가 있는지 확인해야합니다 이 추가 기능을 사용하지 않도록 설정 하시겠습니까? "

, 지역

사용자는 일반적으로 예를 클릭하거나 메시지를 읽고 다음 내 추가 기능이 엑셀에서 사라없이 입력합니다. 그래서이 대화 상자가 나타나기를 원하지 않습니다. 그것은 가능하고 어떻게? 감사합니다

나는 아래처럼 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이 충돌하는 경우 Excel에서 충돌이 발생했을 때 호출 된 추가 기능을 알기 때문에 다음에 설명 할 때 사용하지 않도록 설정합니다. 따라서 모달 대화 상자가 표시되는 동안 Excel이 예기치 않게 종료되면 추가 기능이 '원인'으로 기억됩니다.

.NET이 네이티브 프로세스 (Excel)에서 호스팅되므로 처리되지 않은 예외를 처리하려는 시도가 효과적이지 않습니다. 그래서 Excel로 버블 링되는 처리되지 않은 예외는 .NET 런타임으로 반환되지 않지만 전체 Excel 프로세스가 충돌 할 가능성이 높습니다. 따라서 더 많은 예외를 처리하려고 시도하는 것이 도움이되지 않습니다.

아마도 모달 대화 상자는 사용자가 혼란스러워하고 Excel이 손상되어 예상치 못한 종료를 초래할 수 있으므로 올바른 방법이 아닙니다. 적어도 Excel 창을 모달 대화 상자의 부모로 설정하여 대화 상자가 Excel 앞에 유지되도록하십시오.

+0

감사합니다. 예, 사용자는 작업 관리자에서 Excel을 닫고 Excel 아이콘을 마우스 오른쪽 버튼으로 클릭하고 상태 표시 줄에서 모든 창 닫기를 클릭하십시오. 웹 서비스에서 데이터를 가져 오면 My addin에 "취소"버튼이있는 모달 대화 상자가 표시됩니다. 사용자가 취소하려는 경우 버튼을 클릭 할 수 있습니다. 취소하지 않으면 데이터 가져 오기가 완료 될 때까지 대화 상자 창이 Excel 앞에 표시됩니다. WPF를 사용하고 있습니다. 창 부모는 읽기 전용입니다. 리본 클릭 이벤트 핸들러에서 ShowDialog를 호출합니다. 그래서 Excel로 부모를 설정하는 방법을 잘 모르겠습니다. – toosensitive

+0

myadd가 비활성화되었을 때 알 수 있습니다. myadd com 도우미가 disabledItems에 저장됩니다. myadd.xll은 여전히 ​​활성 목록에 있습니다. 따라서 AutoOpen에서 myadd com 도우미를로드/생성 할 수있는 방법이 있는지 궁금합니다. 감사합니다 – toosensitive

+0

레지스트리에서 비활성화 된 항목이 기록 된 위치를 파악한 다음 AutoOpen에서 해당 레지스트리 항목을 삭제하려고 시도 할 수 있습니다. 한 곳은 다음과 비슷할 수 있습니다. HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 14.0 \ Excel \ Resiliency \ DisabledItems – Govert