Interoperabilidade do Excel - chamada de procedimento remoto falhou ou RPC_E_SERVERFAULT

3

Temos um aplicativo C # que invoca internamente o Excel. Ele faz isso usando o Microsoft.Office.Interop.Excel.dll. O aplicativo funciona na maioria dos computadores com o Excel, mas não no meu.

Originalmente, o aplicativo estava falhando com HRESULT 0x800706BE (Falha na chamada de procedimento remoto). Eu tentei quase todos os conselhos encontrados na web, mas sem sucesso. Em seguida, desinstalei o MS Office 2013 Pro e instalei o Office 365 v2013. O aplicativo ainda falha na mesma linha de código, mas agora com HRESULT 0x80010105 (RPC_E_SERVERFAULT).

Existe algum conselho que você possa dar para fazer o excel interoperar funcionando? Meu palpite é que algum serviço do Windows não foi iniciado ou um componente DCOM não está registrado. Mas eu não sei qual.

Detalhes:

  • Windows 7 x64, MS Office 2013 Pro / 365 ProPlus
  • É um aplicativo c #. Ele é compilado com o VS2010 para .NET 4.0, mas o problema é exibido mesmo quando o aplicativo é compilado com o VS2012 para .NET 4.5. Com o uso de diferentes versões do Microsoft.Office.Interop.Excel.dll.

Existem três fatos que considero importantes:

  • O aplicativo funciona em outros computadores, portanto, não é o aplicativo que causa o problema.
  • O aplicativo não funciona mesmo após a reinstalação de uma versão (ligeiramente diferente) do excel (2013), portanto, provavelmente não é um problema do próprio Excel.
  • Eu usei o ProcessMonitor da SysInternals para descobrir que o aplicativo realmente consegue instanciar o excel, e o excel com êxito (?) lê o arquivo .xlsx. Mas então o Excel falha.

Eu também usei o depurador VS2010 para descobrir o que está acontecendo:

  • Este é o núcleo do código. Ele falha na última linha do Open:

    using Excel = Microsoft.Office.Interop.Excel;
    object misValue = System.Reflection.Missing.Value;
    
    Excel.Application myExcelApp = new Excel.Application();
    myExcelApp.Visible = false;
    myExcelWorkbooks = myExcelApp.Workbooks;
    myExcelWorkbook = myExcelWorkbooks.Open(xlsxFileFullPath, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue);
    
  • Não há nada relevante no log de eventos do Windows (no momento em que o aplicativo falha).

  • Aqui estão alguns dos links que encontrei, mas não há sugestões dadas, ou eles não ajudaram: link1 , link2 , ... (não pode postar mais de 2 links)
por xarx 16.09.2016 / 09:00

2 respostas

7

Após uma longa pesquisa, consegui resolver esse problema devido a esse link . Essencialmente, o problema foi causado por um plug-in do Excel COM de terceiros, no meu caso foi "FoxitReader PDF Creator COM Add-in". Depois de desativá-lo, o problema desapareceu!

Como desativar o plug-in: Excel > Arquivo > Opções > Suplementos > Gerencie e escolha "Suplementos COM" > Vai. E então desmarque o plugin problemático.

    
por 23.09.2016 / 11:04
1

Eu tive exatamente o mesmo problema que o xarx. De repente, um aplicativo que criei parou de funcionar em determinados computadores. O código em que estava colidindo foi:

Dim fname As String = "B:\Data Warehouse\Lists\WarehouseLists.xls"
    Try
        xlWorkBookList = xlAppLists.Workbooks.Open(fname,, False) 'open the raw data sheet
    Catch ex As Exception
        MessageBox.Show(ex.Message)
        Exit Sub
    End Try

Desativar o suplemento do Foxit Reader corrigiu o problema imediatamente.

    
por 13.12.2016 / 19:23