Pergunta

Usamos arquivos de manifestos para fazer com o COM, como eu também elaborei em esta outra questão.

Agora estamos tentando usar o COM sem registro com um aplicativo que suporta plug-ins. Os plug-ins são arquivos OCX que podem ser adicionados à pasta do aplicativo principal depois que o aplicativo principal já estiver instalado.

No entanto, isso significa que o arquivo manifesto do aplicativo principal precisaria ser corrigido pelo instalador do plug-in. Parece uma coisa perigosa e propensa a fazer, especialmente se vários plug-ins puderem ser instalados.

Existe uma maneira de dividir o arquivo manifesto do aplicativo principal, para que cada plug-in possa adicionar com segurança sua própria parte como um arquivo separado? Ou outra maneira segura de corrigir o arquivo manifesto?

Caso seja relevante: criamos nossos instaladores com Wix.

Foi útil?

Solução

Eu não recomendaria modificar o arquivo manifesto do aplicativo; Isso parece bastante frágil e só funcionaria se vive em um local escritor.

Na inicialização do processo, o manifesto de um aplicativo é usado para gerar um "contexto de ativação", que é pressionado como o contexto de ativação em todo o processo. Mas cada encadeamento também possui uma pilha de ativação-contexto, que pode ser manipulada diretamente. As operações em um determinado encadeamento procuram o contexto mais alto da pilha e o contexto de ativação em todo o processo ao procurar dados de registro de COM.

A recomendação é que, sempre que o código do plug-in precise ligar para o COM, um manifesto específico do plugin deve ser ativado no encadeamento. Isso pode ser feito com mais facilidade de uma de duas maneiras:

  1. Incorporar o manifesto específico do plugin como um manifesto ID2 no plug-in e compilar com a macro Isolation_AWare_enabled definiram. Isso basicamente envolve as APIs comuns do Windows que precisam de contexto de um manifesto para ativar e desativar automaticamente o contexto de ativação adequado em torno da chamada.

  2. Ative/desative o contexto de ativação adequado no encadeamento em torno de todos os pontos de entrada no plug -in. Isso é feito através do APIs de contexto de ativação. Isso é mais facilmente feito com uma ativação objeto de gerenciamento de contexto.

Outras dicas

Se você está usando .NET, você pode usar o código mostrado nesta resposta para cuidar dos contextos de ativação.

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