Pergunta

Alguém sabe como obter as bibliotecas MS Office 2007 .NET C # interoperabilidade para trabalhar com o Vista?

Eu tenho um aplicativo .NET C # que eu tenho configurado para ser executado como um serviço do Windows. Este programa irá abrir um modelo do Word ou Excel, dependendo da situação e modificar o seu conteúdo e depois salvar o documento para fora para trás. Tudo isso funcionou muito bem quando eu estava fazendo isso em uma máquina Windows Server 2003 ou XP usando o Office 2007. Quando me mudei tudo a uma caixa Server 2008, tudo parou de funcionar. No Excel, por exemplo, eu recebo uma exceção COM me dizendo que o arquivo Excel não pode ser aberto quando o arquivo é claramente lá e posso abri-lo muito bem quando fazê-lo manualmente. O serviço do Windows é executado sob a mesma conta de usuário que eu logon na máquina com e que conta é um administrador.

Alguém tem alguma idéia do que fazer?

Foi útil?

Solução

Você realmente deve evitar executar os clientes do Office como aplicativos do lado do servidor. Considere o uso de XML como formato de arquivo (xlsx para o Office 2007, ou usando o Excel pasta de trabalho xsd para (um pouco) versões mais antigas.) Então você teria que ser libertados usando a API do Excel no servidor.

Outras dicas

No Vista e Windows Server 2008, os serviços são executados em algo chamado Session0. Antes Vista, programas regulares seria executado no Session0 ao lado de serviços.

Isto significa que Session0 tornou-se um deserto desktop menos onde seus serviços não pode sequer explorer.exe acesso. Tenho certeza de que o problema é que os aplicativos do Office estão esperando para ser capaz de acessar alguns componentes que são normalmente no ambiente de trabalho.

Desde Excel, Word, etc. são suportados somente em uma sessão de desktop-ed, você só tem algumas opções:

  1. Definir a caixa de seleção Desktop na guia Logon de propriedades e rezar para que ele propicia os deuses escritório do seu Serviço. (Ele provavelmente não vai.)
    • Depois de tentar 1, passar por seu código e tentar remover / trabalho em torno de tudo o que faz com que ele deixe de funcionar.
  2. Use remoting / WCF para fazer um servidor que executa o trabalho de interoperabilidade, e fazer o seu serviço comunicar com ele.
    • Você vai precisar de ter uma sessão iniciada interativo e o usuário precisa iniciar o aplicativo de servidor de alguma forma. Talvez o melhor para uso autostart.
    • Você pode tentar ligar o login automático. http://support.microsoft.com/kb/324737
  3. Tente passar por um usuário conectado usando CreateProcessAsUser e amigos.
    • Nota: Eu não sei como isso funciona bem menos que um usuário realmente está logado, por isso não poderia ser mais útil do que 2 acima, e é muito mais difícil de retirar. (Precisa de P / Invoke)
  4. Reescreva o seu programa para usar o SDK OpenXML ou usar algo como SpreadsheetGear.

Eu fiz encontrar um interessante artigo da Microsoft dizendo basicamente não fazem automação de escritório.

Obter os instaláveis ??de http://www.microsoft. com / download / details.aspx? FamilyID = 59daebaa-bed4-4282-a28c-b864d8bfa513 & displaylang = en

instalá-lo em seu sistema e consultar excel dll na sua solução e espero que ele deve funcionar.

Você tem a módulos de interoperabilidade primários instalado no servidor? Estes são geralmente localizado no GAC e não incluído no diretório bin quando você construir o seu programa, de modo que seria necessário para ser instalado localmente no servidor.

Este é apenas um palpite, mas pode ser UAC. Eu sei que privilegiados (admin) e aplicativos de usuário não pode enviar mensagens uns aos outros ou se comunicar de qualquer forma. Seu serviço está sendo executado como um administrador, mas sua área de trabalho está sendo executado como um usuário regular no UAC, embora sejam o mesmo usuário. Também espero que o Office iniciou-se (pré-carregado) partes de si mesmo na inicialização e que estaria funcionando como um usuário regular.

Tente desligar o UAC e ver se isso ajuda. Se assim for, pelo menos você sabe o que é.

Você deixa uma conta registrada na máquina? Office não é um aplicativo do lado do servidor, e você obterá erros aleatórios, se você tentar iniciar qualquer um dos executáveis ??sem um contexto desktop.

Algo para se lembrar sobre o Office. Sua somente x86, por isso, se a sua criação de um aplicativo em x64, você não será capaz de acessar os objetos COM subjacentes Office. Você vai precisar de compilar o aplicativo em x86, em seguida, ele iria trabalhar.

Você pode fazer isso indo para as propriedades do seu projeto, e selecionando x86 sob a aba de construção no estúdio visual.

Isso é tudo assumindo que seu aplicativo está sendo desenvolvido / executado em um ambiente x64 que é.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top