Páginas

domingo, 25 de julho de 2010

Multifuncional HP PSC1315: Setup não roda.

 

Este problema não está documentado no site de suporte da HP e impede a instalação de todas as impressoras das séries PSC1310 e Officejet 4200. É importante que você familiarize-se com ele, porque sua causa pode afetar outros programas.
O cliente me telefonou porque não conseguia instalar sua PSC1315 no notebook (PC1). Ele havia baixado o driver do site da HP e setup.exe simplesmente não rodava, não importando o quanto se clicasse nele. Eu lembrei-o que ele tinha o CD original de instalação e disse que tentasse com ele. Mesmo problema.
Eu mesmo já havia instalado essa mesma impressora com o mesmo CD diversas vezes nesse mesmo cliente sem problema algum (quer dizer: tirando a enorme demora habitual para se instalar os "drivers" enormes da HP). Fui até lá para tentar resolver e constatei com o Process Explorer que setup.exe até começava a rodar, mas encerrava silenciosamente um segundo depois. Nenhuma mensagem de erro.
Parti para o mais complexo Process Monitor, mas nada no (longo) log de execução me deu qualquer pista útil (ou assim pensei) do que estava ocorrendo.

Desconfiado de que fosse algo no XP SP3, testei em outro computador do cliente onde eu instalei o SP3 do zero na mesma época que no notebook e o setup rodou (PC2), então não era o SP3. Testei num terceiro PC do cliente com o SP3 e também não rodou (PC3). Depois de apanhar muito tentando entender o que poderia haver em PC1 e PC3 mas não em PC2, joguei a toalha e disse ao cliente que iria pesquisar em casa. Decidi instalar os drivers no meu PC para analisar como deveria ser uma instalação bem-sucedida vista pelo Process Monitor e para minha surpresa, setup.exe também encerrava silenciosamente no meu PC (PC4).

Eu fiquei perplexo. Tentei encontrar algo em comum entre PC1, PC3 e PC4 que não estivesse também instalado no PC2 e não estava encontrando nada. Até que me deu um estalo: quando eu coloquei o CD no PC2 apareceu automaticamente o setup e naquele momento mesmo eu pensei que não deveria ter aparecido, porque neste cliente eu desabilitara o Autorun de todas as máquinas seguindo o hack "@SYS:DoesNotExist". Mas como eu estava ocupado com um problema mais importante, não dei muita atenção. Nota: mais tarde eu cheguei à conclusão de que esquecera de desabilitar o Autourun nesta máquina específica após uma reinstalação.

E no meu PC o Autorun também está desabilitado da mesma forma. Não fazia sentido porque eu estava executando o programa diretamente, mas como era minha única pista, reativei o Autorun no meu PC (apagando a chave HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf) para ver o que acontecia.

E o maldito setup.exe rodou como deveria.
Fui examinar o autorun.inf do CD da HP e as coisas começaram a fazer sentido. A maioria esmagadora desses arquivos tem no máximo umas quatro linhas e uns poucos tem uma ou duas dúzias por usarem funcionalidade avançada (que a maioria dos usuários ignora), mas a HP decidiu fazer de Autorun.inf o "INI" do instalador. O arquivo tem 996 linhas (Edit: o da Photosmart C4200 series tem 10932 linhas) de parâmetros/diretivas e se parece com isso:

[Version]

CDGuid={18E0918E-1060-48f3-925C-56C82E88551B}

SoftwareGuid={1A5C2933-7A90-41df-97E6-2845F67834D8}

InfrastructureDatabaseList=hpomdl03.dat

LanguagesInthisCD=enu,esn,fra,ptb

DefaultLanguageInThisRelease=enu

DIVISION=hpo

ICE_REV=03

FIRST_IO_REVISION=08

LAST_IO_REVISION=08

VCD_FILEVER=09

Manufacturer=HP

RegistryManufacturer=Hewlett-Packard

ProductSeries=All-In-One Series

Pre-Install=%ProgramFiles%%Manufacturer%

SilentInstall=No

PreloadICEEngineToGUIDFolder=hpzprl01.dat

PreloadRecoveryMechanism=hpzprl02.dat

Verifiquei a versão que se baixa do site e, claro, também tinha um autorun.inf do mesmo calibre.

O problema é que o mecanismo do hack "@SYS:DoesNotExist" se baseia justamente em redirecionar toda tentativa de acesso a autorun.inf. Como setup.exe não conseguia encontrar seus parâmetros, o programa era encerrado sem explicações.

Ainda intrigado, fui checar no Process Monitor se ele não era capaz de mostrar o problema. Armado com as informações que agora eu tinha e com a ajuda da função Localizar do PM (procurei por "autorun.inf") foi fácil achar, no meio dos 1249 eventos gerados por setup.exe antes de se encerrar, evidência de que com bastante atenção teria sido possível encurtar o diagnóstico:

Perceba que cada operação bem sucedida de leitura de autorun.inf é seguida por uma ou mais falhas ao ler algo sob a chave HKLM\Software\DoesNotExist\ no Registro. É lógico que não ajuda muito quando você não sabe que conteúdo deveria ter "DoesNotExist" e você ficaria ainda mais intrigado ao perceber que "DoesNotExist" realmente "não existe" em nenhum computador. Mas nesse caso específico uma rápida busca no Google por "HKLM\Software\DoesNotExist\" traria algum esclarecimento. 

É claro que estabelecer a ligação entre o erro e o bloqueio do Autorun não ajuda muito quando você sabe que ao clicar direto em setup.exe, autorun.inf não deveria ter qualquer efeito, mas pelo menos você estaria no caminho certo. Eu, pelo menos, apesar de achar sem sentido fiz o teste quando me vi sem opções e percebi (por outro caminho) a conexão. Lembre-se da famosa frase de Arthur Conan Doyle/Sherlock Holmes: "Quando você tiver descartado todo o impossível, o que sobrar, embora improvável, deve ser a verdade".

E agora você já pode ter em mente: Qualquer tentativa bem sucedida de ler um arquivo de configuração qualquer (INF, INI, etc)  seguida de tentativas fracassadas de ler uma chave no Registro pode ser culpa de algo sob a chave IniFileMapping do Registro.

Como se pode ver, o uso do hack "@SYS:DoesNotExist" tem efeitos colaterais que podem ser enlouquecedores. Por sorte, não são muitos os instaladores que "pervertem" a finalidade de autorun.inf como a HP fez e além disso surgiu recentemente outro modo eficiente de bloqueio do Autorun.

Fonte:Geringonças e gambiarras

http://jefferson-ryan.blogspot.com

Nenhum comentário:

Postar um comentário