-->

sexta-feira, 3 de abril de 2009

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.

A explicação curta: 

O acesso ao arquivo autorun.inf está sendo bloqueado por algum mecanismo de proteção anti-virus. Remova a causa e o setup rodará. Parece absurdo? Leia a explicação a seguir.

A explicação longa:

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.

9 comentários:

  1. Anônimo6/4/09 20:28

    Que coisa hein.
    HP tem nos trazido surpresas. Minha multifuncional C4480 so funciona com cabos USB ditos 2.0, que na verdade, até onde sei, é a mesma pinagem dos cabos mais genericos porem com uma melhor blindagem.
    Marcelo

    ResponderExcluir
  2. Anônimo,

    Um amigo me reportou esse mesmo problema. A HP dele não queria colaborar de jeito nenhum até que ele comprou um cabo "USB 2.0".

    Faz sentido, porque além da blindagem existem outras características (como a impedância) que precisam de um controle mais rígido para suportar a velocidade superior.

    ResponderExcluir
  3. Interessante o post, parabéns por disponibilizar online a informação, não é o que procuro mas já anotei a dica.

    ResponderExcluir
  4. 2 anos e pouco depois e hoje tive esse problema, mas quem fez esse hack do DoesNotExist foi o Panda Cloud Antivirus, ele tem a função de desabilitar autorun e enquanto não desmarcar isso nele é só rebootar que as chaves no regedit são recriadas, perdi uma hora hoje pra descobrir isso.

    ResponderExcluir
  5. salut
    meme probleme le setup.exe ne se lance pas après l'extraction
    aidez mois merci
    WIN XP SP3
    HP PSC 1315
    IE8

    ResponderExcluir
  6. Belo post, muito bem detalhado, passei pela mesma situação e me salvou.
    Seu blog é sensacional.

    ResponderExcluir
  7. Bom dia.

    Acabei de virar mais uma madrugada quebrando a cabeça com este problema. Fica aqui registrado o meu muitíssimo obrigado pela solução.

    Aconteceu comigo com um scanner HP ScanJet 5590... pasmem: o arquivo autorun.inf tem 160kb... isso mesmo 160kb!!!!!

    #hp #vergonha

    ResponderExcluir
  8. Anônimo4/9/13 22:22

    Parabéns, sua aula foi muito oportuna, eu estava há 3 horas tentando resolver o problema de não instalação da HP PSC 1315 no windows XP 32 bits.
    No computador do cliente instalei o Panda USB Vaccine que realmente desativa o autorun.

    Muito grato.

    Allemão

    ResponderExcluir

Siga as regras do blog ou seu comentário será ignorado.