Olá Pessoal,

No dia 30 de Setembro fiz um apresentação no TechEd Brasil sobre Compatibilidade de Aplicações, prometi para os presentes que colocaria aqui no blog um post com o passo-a-passo para se criar um Shim, conforme prometido, aqui vai..
Neste tutorial, vou demonstrar como associar o Shim RunAsAdmin a uma aplicação chamada UI.exe. Veja no final do post o link para o site com a documentação dos shims disponíveis, o mesmo procedimento vale para os demais.

 

Tutorial

Para a criação de um Shim você precisará fazer download do Application Compatibility Toolkit (ACT). Faça o donwload do ACT no link: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7352
Após
instalar a ferramenta, acesse no menu Iniciar >> All Programs >> Microsoft Application Compatibility Toolkit >> Compatibility Administrator.
Vocë verá a seguinte tela:

 

Clique com o botão direito sobre o item New Database(1) [Untitled_1], selecione Create New >> Application Fix... 

Na tela Program Information, preencha os campos com as informações solicitadas e clieque em Next

 Na tela seguinte, Compatibility Modes, apenas clique em Next

 

 

Na tela Compatibility Fixes, selecione na lista o item RunAsAdmin, e clique em Next

 

Na tela Matching Information, você deverá selecionar os parâmetros que serão usados para associar seu executável ao seu Shim.
Os parâmetros abaixo são os selecionados por padrão mas você poderá escolher outros ou tirar alguns se quiser. Caso você use o controle de versão do compilador e queira que o Shim também funcione para versões futuras do seu programa, você deverá retirar os parâmetros referentes a versão do aplicativo.

 

Clique em Finish e veja que seu Shim estará criado.

 

Agora, salve o seu trabalho, clicando no botão Save.
Ao fazer isso, a primeira informação que você precisará informar será o Database Name.
Os Shims ficam armazenados dentro de arquivos .SDB que são bancos de dados de Shims.
O nome que você colocar nesta tela será o nome que vai aparecer no Painel de Controle na lista de Adicionar e Remover Programas.

  

Ao clicar em OK, ele solicitará que você salve o arquivo em alguma pasta. Escolha o local que quiser para salvar o arquivo.
Pronto, seu Shim está criado e pronto para ser instalado.

Notas:

  1. Caso tenha mais programas que precisem de Shim, você pode deixá-los todos dentro do mesmo arquivo, basta repetir o procedimento desde o início.
  2. Caso precise fazer alguma alteração no Shim, basta abrir o arquivo .SDB no mesmo programa, fazer as alterações e salvá-lo.
  3. Lembre-se que para desinstalar basta ir no Painel de Controle em Adicionar e Remover Programas.

 

Instalação:

Para instalar o Shim basta executaro o comando sdbinst <path do arquivo>

Exemplo: sdbshim "c:\temp\MeuShim.sdb"

Informações Complementares:

Veja a documentação dos Shims disponíveis no link: http://technet.microsoft.com/en-us/library/cc722305(WS.10).aspx

Os Shims não interceptam DLLs que estão na pasta System32. Ou seja, se você tiver um programa em VB6 ou em outra linguagem que utilize algum runtime que fica nesta pasta, será necessário indicar ao Shim que ele precisará interceptar também esta DLL, veja na figura abaixo como configurar isto.
Você pode identificar se é necessário ou não incluir alguma DLL aqui analisando o log do Processo Monitor - veja a Call Stack do evento que você precisa manipular.

A figura a seguir também ilustra o local onde os parâmetros devem ser incluídos, para os Shims que requerem parâmetros.

 

Espero que séja útil, comentários e revisões são bem vindos para ajudar a aprimorar este tutorial.

 

-- Fabio Casado, Consultor, Microsoft Consulting Services (MCS)