Problema de ícone de atalho bizarro com XP-7 dual-boot

3

Eu faço o boot duplo do Windows XP e do Windows 7 e me deparo com um problema peculiar com ícones para atalhos.

Uma área de trabalho diferente é usada para cada sistema operacional, portanto, eu tenho um atalho para o outro em cada um para facilitar o acesso a ambas as versões do Windows; ou seja, no XP, a área de trabalho contém um atalho chamado 7Desk e, em 7, a área de trabalho contém um atalho chamado XPDesk . Além disso, 7Desk.lnk está definido para usar o recurso de ícone da área de trabalho de shell32.dll do Windows 7 e XPDesk.lnk está definido para usar o recurso de ícone da área de trabalho shell32.dll do Windows XP. Dessa forma, cada atalho mostra o ícone do outro sistema operacional na área de trabalho.

O problema é que, embora na caixa de diálogo Alterar ícone eu possa ver os ícones corretos (para o outro sistema operacional), quando clico em OK, o ícone mostra o ícone correspondente do sistema operacional inicializado em vez do outro. Eu confirmei isso para outros recursos de ícones e também para os ícones da Lixeira.

Isso é desconcertante porque, no que diz respeito ao Windows (e à caixa de diálogo Alterar Ícone ), shell32.dll da outra unidade é apenas um arquivo contendo ícones. Não há razão para tratar a DLL especialmente, e ainda mais misterioso é como ela sabe quais dos seus ícones próprios devem ser usados no lugar dela. Isto é, como o XP sabe usar o ícone do desktop XP no lugar do ícone da área de trabalho 7, ou como 7 sabe usar o ícone da lixeira 7 no lugar do ícone da lixeira do XP? E só para tornar as coisas ainda mais confusas, eu verifiquei os arquivos LNK em um editor hexadecimal e posso ver claramente que o recurso de ícone está realmente apontando para o arquivo na outra unidade, não simplesmente para \windows\system32\shell32.dll .

(Concedido, os índices dos ícones são os mesmos, então talvez ele esteja simplesmente usando sua própria cópia de shell32.dll em vez daquela especificada em uma unidade diferente, mas, então, por que está fazendo isso É algum tipo de "AI" na função Change Dialog , tentando fazer o que pensa que queremos em vez do que dizemos?

Eu posso gravar um teste de tela se o problema não estiver claro.

    
por Synetech 15.09.2011 / 00:19

2 respostas

3

É possível que o Windows use o LoadLibrary para carregar a DLL com os ícones. Quando LoadLibrary vê que uma DLL é carregada, ele usará o que já está carregado; a verificação é baseada no nome da DLL, não na localização.

Nesse caso, uma solução alternativa é criar cópias de ambas as bibliotecas shell32.dll com nomes diferentes (por exemplo, shell32-xp.dll e shell32-7.dll) e, em seguida, alterar os ícones para fazer referência a esses arquivos.

    
por 15.09.2011 / 01:04
0

Para contornar essa parte de cópia, você poderia hardlink-los, cada um em sua própria unidade. Isso é pelo menos o que eu fiz. E não há mais problemas em ter várias cópias de cada arquivo.

fsutil hardlink create \WINDOWS\system32\shell32_xp.dll \WINDOWS\system32\shell32.dll

Este é do lado do XP. No lado do Windows 7, você substitui a parte _xp por _7:)

EDIT: Eu vi que o lado do Windows 7 não funciona. A menos que você quebre as permissões (com a chance de destruir tudo no sistema), você só deve fazer isso no lado do XP.

Se você ainda quiser fazer isso, deverá apropriar-se do arquivo e alterar as permissões, mas será avisado novamente!

    
por 03.02.2014 / 02:30