C # COM Office Automation - RPC_E_SYS_CALL_FAILED
Pergunta
Eu estou escrevendo um programa C # que funciona como um plug-in 2007 PowerPoint. Em algumas máquinas, algumas chamadas para o modelo de objeto PowerPoint jogar um COMException
com o RPC_E_SYS_CALL_FAILED
mensagem. Eu não poderia encontrar qualquer aconselhamento específico sobre o que fazer em relação a este erro, ou como evitá-la. De pesquisando parece que algo a ver com a fila de mensagens ou single-threaded Apartments. Ou sou maneira I off?
Exemplo da mensagem de erro é:
chamada do sistema falhou. (Exceção de HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED))
em Microsoft.Office.Interop.PowerPoint._Presentation.get_FullName ()
Infelizmente, o problema está ocorrendo na máquina do cliente, por isso tenho nenhuma maneira fácil de depurá-lo! Devo apenas repetir as chamadas sempre que eu recebo este erro?
Algum conselho para me ajudar a resolver este problema seria muito apreciada!
Solução
Eu não sei que está relacionado ao seu problema, mas todas as suas chamadas COM deve vir de dentro do mesmo segmento o suplemento foi criado. Se você criou novos tópicos que você deve tomar cuidado especial. Detalhes estão descritos nestes dois artigos:
Outras dicas
que você está fazendo a chamada de um segmento com seu conjunto ApartmentState? se não, que poderia ser o culpado - interoperabilidade é bastante exigente com esse tipo de coisa
Quais são as configurações de segurança do cliente? É bem possível que as configurações de segurança do cliente (Windows / configurações de sistema operacional ou configurações PowerPoint / APP) não permitirá que seu plug-in para se comunicar via RPC.
Este pode muito facilmente acontecer se você fizer todas as chamadas para o modelo de objeto do PowerPoint de uma discussão de fundo. Um cenário plausível é ter um timer que verifica periodicamente algum tipo de valor de status. Se, quando os incêndios temporizador, Powerpoint está ocupado (por exemplo, uma caixa de diálogo é aberta), a chamada falhará.
Este artigo Microsoft dá uma visão geral do suporte de threading no Office: http://msdn.microsoft.com/en-us/library/8sesy69e. aspx