Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Иконка на тулбаре из "недоступного" файла

 
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы printer-friendly view
View previous topic :: View next topic  
Author Message
gora



Joined: 30 Dec 2004
Posts: 442
Location: Иваново

Post (Separately) Posted: Wed Apr 18, 2012 12:50    Post subject: Иконка на тулбаре из "недоступного" файла Reply with quote

Win 7 x64, TCb25 x86
Создал кнопку на тулбаре
Code:
TOTALCMD#BAR#DATA
c:\Windows\System32\msconfig.exe

c:\Windows\System32\msconfig.exe
msconfig
c:\Windows\System32\
0
-1
Кнопка не работает и это понятно. Не понятно почему отображается иконка из msconfig.exe? Если попытаться найти файл для этой иконки через настройки кнопки, то файла не обнаружится, т.к., он расположен в папке, которая не видна из x86 ТС. Так почему же x86 ТС находит и отображает иконку из этого файла?
_________________
Win7 SP1 Ultimate x64, TC8.52a x64
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Apr 18, 2012 12:56    Post subject: Reply with quote

gora
Если удалить br2 текущего бара, иконка остаётся после переоткрытия панели?
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6193
Location: Москва

Post (Separately) Posted: Wed Apr 18, 2012 13:29    Post subject: Reply with quote

Flasher
Остаётся. Confused
Вообще, занятно: если открыть диалог настройки панели инструментов, там значка нет ни в области набора кнопок, ни в поле "Значок". Но при нажатии OK на самой панели значок исправно отображается. ProcMon показывает, что Тотал сначала пытается открыть msconfig.exe из каталога SysWOW64, не находит файла, после чего открывает msconfig.exe из System32 и, судя по всему, считывает значок оттуда.

Добавлено спустя 1 час 58 минут:

Похоже, это особенность самой винды. Я помониторил, какие API-функции использует Тотал для загрузки значков: это LoadLibraryEx с флагом LOAD_LIBRARY_AS_DATAFILE. Так вот, оказывается, что если я в 32-битном приложении загружаю библиотеку из system32 с этим флагом, она подгружается нормально. Без этого
флага возвращает ошибку, что файл не найден.

То есть, получается, что редирект файловой системы в виндах построен сложнее, чем тупое перенаправление абсолютно всех запросов в другую папку. Перенаправляются только те запросы, которые потенциально приведут к ошибке (типа загрузки 64-битной библиотеки в память 32-битного процесса), а если из библиотеки вытаскиваются только ресурсы (которые от битности не зависят), то сначала проверяется каталог syswow64, а если вернулась ошибка, то выполняется попытка обработать тот же путь, но без редиректа.

Последнее, кстати, легко проверяется: если в каталоге SysWOW64 скопировать какой-нибудь mspaint.exe под именем msconfig.exe, удалить BR2-файл и перезапустить 32-битный Тотал, то у кнопки в панели инструментов окажется значок mspaint.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
gora



Joined: 30 Dec 2004
Posts: 442
Location: Иваново

Post (Separately) Posted: Wed Apr 18, 2012 15:50    Post subject: Reply with quote

CaptainFlint
Спасибо за разъяснения.
_________________
Win7 SP1 Ultimate x64, TC8.52a x64
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group