Como identificar estaticamente os arquivos sys dos quais um aplicativo depende?

Como identificar estaticamente os arquivos sys dos quais um aplicativo depende?

Para ajudar na migração de aplicativos de sistemas operacionais legados (por exemplo, XP), preciso identificar os arquivos de driver (sys) dos quais um aplicativo depende para ser executado. Isto precisa ser feito inspecionando um sistema existente com o aplicativo instalado, sem executar o instalador e sem executar o aplicativo.

Embora não seja uma solução perfeita, foi feita uma tentativa de identificar drivers prontos para uso (drivers adicionados desde a instalação do sistema operacional), pois isso reduzirá o número de arquivos sys a serem considerados. A API DISM pode retornar o status da caixa de entrada de um driver, mas isso requer Windows 7 e superior.

Até agora, uma solução confiável provou ser evasiva no XP. É possível que a consulta de metadados de carimbo de data/hora NTFS (por exemplo, Alterado) ajude a identificar arquivos sys que foram adicionados ao sistema de arquivos desde que o sistema operacional foi instalado. Mesmo que seja bem-sucedido, isso apenas restringe o campo de investigação; na verdade, não identifica os drivers dos quais uma aplicação depende.

Eu fiz uma pergunta semelhanteaqui.

Então, como identificar estaticamente os arquivos sys dos quais um aplicativo depende?

Responder1

Este é um equívoco: nenhum programa é “dependente” de .sysarquivos ou drivers. Depende apenas do sistema operacional, e o sistema operacional usa quaisquer módulos que pareçam apropriados.

Por exemplo, se o seu programa deseja imprimir, não depende do driver da impressora do computador onde foi desenvolvido. Em outro computador, com outro sistema operacional ou outra impressora, será utilizado outro driver.

Em sua outra postagem, você foi aconselhado a usar o Andador de Dependência, que informará quais DLLs um programa chama. No computador de destino, você precisará garantir que alguma versão dessas DLLs esteja disponível.

Algumas DLLs, como kernel32.dllsão parte integrante do Windows e existirão em qualquer versão do Windows.

Outras DLLs, pertencentes, por exemplo, ao .Net Framework ou ao C/C++ Runtime, podem ou não ser instaladas no computador de destino, e você também pode precisar da versão correta para ser instalada.

Embora o .Net Framework seja compatível com versões anteriores, o que significa que uma versão superior funcionará para um programa compilado com uma versão inferior, o C/C++ Runtime precisa da versão exata, portanto, pode ser necessário distribuir as DLLs com o seu produto.

Existe um termo criado para isso:Inferno de DLL, o que é inteiramente apropriado. Como desenvolvedor, você precisará testar seu software distribuído em tantos ambientes quanto possível para minimizar esse inferno. Mas tenha certeza de que mais cedo ou mais tarde você o encontrará.

informação relacionada