Pergunta

Eu criei os manifestos necessários para o meu servidor DLL COM e um aplicativo cliente para registro-livre no Windows XP trabalho. Eu testei todos os tipos de combinações (com e sem registro) e em todos os casos, a aplicação cliente vê a versão side-by-side da biblioteca se os manifestos estão presentes, e aquela registrada se não for (ou um erro COM se não houver registro em tudo). Eu testei na minha máquina de desenvolvimento do Windows XP, e dado os arquivos (DLL, o cliente EXE e um manifesto para cada) para colegas de trabalho, que também já correm tudo com sucesso em suas próprias máquinas com Windows XP. Os manifestos são arquivos XML externos, e não recursos incorporados. Por enquanto, tudo bem.

No entanto, quando eu copiar os arquivos para uma máquina Windows Server 2003, ele não funciona. Eu recebo uma falha silenciosa, mas um erro de aplicativo no log de eventos do aplicativo (veja abaixo). Se eu cancelar o registro da DLL e remover os manifestos, eu recebo um erro semelhante (silêncio no prompt de comando, mas um erro de aplicativo no log de eventos). Obviamente, há alguns problemas para encontrar o registro. Tenho reproduzida isso em cada máquina Windows Server 2003 que pode acessar em nossa empresa. De acordo com a documentação da Microsoft em side-by-side / Registro-livre COM, que é suposto trabalho no Windows XP e posterior e Windows Server 2003 e, mais tarde.

Para ser claro, o mesmo cliente funciona perfeitamente nessas mesmas máquinas com Windows Server 2003 contra uma versão registrados ( ou seja, usando regsvr32) do mesmo COM DLL, sob as mesmas credenciais de login que eu estou tentando usar para cOM sem registro. Em outras palavras, não há problemas intrínsecos disfarçados de problemas COM sem registro - este cliente e servidor funcionar bem quando o servidor está registrado globalmente no registro

.

Alguém tem alguma idéia de como investigar mais? Eu não sou um especialista em Windows Server, mas há talvez alguma configuração que a política terá de ser alterado para permitir que este apoio? Se eu puder localizar a mudança necessária, nosso povo suporte técnico / infra-estrutura provavelmente não terá, provavelmente, fazê-lo, mas não posso contar com eles para pesquisar o problema também como eles são inundados.

No caso é importante (eu não acho que deveria, mas nunca se sabe) o DLL está escrito em Delphi 2007, enquanto o cliente é escrito em Visual C ++.

Event Type: Information
Event Source:   Application Error
Event Category: (100)
Event ID:   1004
Date:       5/2/2009
Time:       8:07:45 AM
User:       N/A
Computer:   ***server name****
Description:
Reporting queued error: faulting application ***program name***.exe, version 0.0.0.0, faulting module ***program name***.exe, version 0.0.0.0, fault address 0x0002ac9e.

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
Foi útil?

Solução

Uma coisa a procurar é que se o exe tem um manifesto interno. No XP, a ordem de pesquisa exe manifesto é externo, então interna. Em Server 2003 e, mais tarde, a ordem é interna, em seguida externo.

Outras dicas

Com um servidor COM criado em Delphi 7, eu vi problemas semelhantes se o servidor COM foi não registrado e o aplicativo cliente iniciado em uma conta de usuário restrito, porque implementação COM da Delphi sempre tentou atualizar as informações de registro, mesmo quando a DLL de função RegisterServer não foi chamado explicitamente.

Para ver se este é um problema, tente executar o aplicativo cliente em uma conta com privilégios administrativos sem restrições.

MSDN menciona, que sob Windows 2003, os problemas com servidores COM registro livre deve ser detalhado em uma seção específica do log de eventos do sistema:

Ao solucionar problemas sem registro questões COM, o Visualizador de eventos no Windows Server 2003 é seu amigo. Quando o Windows XP ou Windows Server 2003 detecta um erro de configuração que vai tipicamente mostrar uma caixa de mensagem de erro intitulado para a aplicação você tem lançado e contendo a mensagem "Este aplicativo falhou ao iniciar porque a configuração da aplicação está incorreto. reinstalar o aplicativo pode corrigir esse problema." I aconselham que sempre que você vê esta mensagem que você reproduzir o problema em Windows Server 2003, consulte o Log de eventos do sistema e olhar para eventos a partir da fonte SideBySide. O motivo Eu não sugiro que você olhar para o Windows XP log de eventos nestes casos é que invariavelmente contêm uma mensagem como "Gerar Activation Contexto falhou por [caminho] [aplicação arquivo] .manifest. erro de referência mensagem: A operação foi concluída com sucesso ", o que não ajuda identifique o problema. http://msdn.microsoft.com/en-us/library/ ms973913.aspx # rfacomwalk_topic6

Além disso, se possível, diga-nos os nomes de arquivo e conteúdo dos arquivos de manifesto que você usa.

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