POZOR, následuje ošklivý, rozvleklý a technický příspěvek. Pouze pro otrlé uživatele
Pokud stačí Salamandera ukončit/znovu spustit, aby zámky povolily (popisovaný případ), pocházely zámky z procesu Salamandera a UNLOCKER, WhoLockMe a spol. nic bližšího neprozradí.
Pokusím se popsat k čemu dochází: některé funkce Salamandera volají služby operačního systému, které se vykonají prostřednictvím tzv. Shell Extensions. Jde o speciální DLL knihovny určené k rozšiřování prostředí Windows. Tyto knihovny se spouštějí v procesu, který zavolal některou z inkriminovaných funkcí operačního systému. V našem případě je to Salamander.
Dva příklady Shell Extension:
1) Rozšíření kontextového menu: uživatel klikne pravým tlačítkem na souboru a v rozbalené nabídce je položka archivátoru 7-Zip, která nabízí zabalení souboru do archivu. Již při otevírání nabídky operační systém požádal Shell Extension od programu 7-Zip, aby nabídku rozšířila o své položky. Pokud si uživatel jeden z nabídnutých příkazů zvolí, je na Shell Extension, aby patřičnou činnost vykonala (v tomto případě iniciovala zabalení souboru do archivu).
2) Poskytování ikonek: v panelu uživatel zobrazí adresář obsahující soubory, které obsahují grafiku (bitmapy, vektory). Speciální Shell Extension pro každý tento soubor připraví zmenšeninu obrázku, kterou vrátí jako ikonku. Uživatel má tak představu, co je uvnitř souboru.
Existuje celá řada Shell Extensions, jedná se o běžnou součást programů. Od malých open source projektů jako je 7-Zip, po velké aplikace typu Adobe Photoshop, Adobe Illustrator nebo Corel Draw.
Pokud je v Shell Extension "chyba" a knihovna například po vytvoření ikonky zapomene zavřít handle (zámek) k souboru, projeví se problém až ve chvíli, kdy se uživatel pokusí soubor smazat. Vypadá to, že handle zapomněl zavřít Salamander (po jeho ukončení soubor již smazat lze). Pokud je v Shell Extension vážnější chyba a knihovna "spadne", spadne z hlediska uživatele Salamander. Někdy se vadná Shell Extension projevuje pouze zpožděním (několik vteřin) při otevírání kontextového menu.
Jak dohledáváme tyto vadné Shell Extensions: využíváme diagnostické funkce Salamandera (menu Help > Report a Bug), která zobrazí seznam DLL knihoven načtených v jeho procesu. Shell Extensions se naštěstí do procesu načítají až ve chvíli, kdy jsou potřeba (otevírá se kontextové menu, zobrazuje se ikonka souboru, atd.). Pokud tedy pořídíme seznam DLL knihoven z "čistého" Salamandera (těsně po spuštění, pokud možno oba panely v prázdných adresářích, aby se nenačetly ikonky), následně reprodukujeme problém (navodíme stav, kdy nelze smazat soubor) a znovu pořídíme seznam načtených DLL knihoven, lze tyto dva seznamy porovnat. Některá z nově načtených knihoven (Shell Extensions) je pravděpodobně příčinou problému.
Shell Extension lze celkem jednoduše potlačit: přejmenujeme knihovnu (například připojíme podtržítko) a restartujeme Windows. Potom zkusíme, zda problém zmizel. Pokud ne, přejmenujeme knihovnu zpět a ta začne samovolně fungovat (je registrována v Registry).
Právě vyhledáváním problematických Shell Extensions se zabývá tento náš text:
http://www.altap.cz/salam_en/faulty_she ... sions.html
Problémy spojené s Shell Extensions, které se projevují v programu Servant Salamander, se často projevují také v případě programu Windows Explorer. Nemusí to však platit vždy, záleží na implementaci konkrétní Shell Extension.
Pokud máte zájem do problematiky hlouběji nahlédnout z hlediska uživatele, mrkněte na tento pěkný nástroj:
http://www.nirsoft.net/utils/shexview.html
Stránka popisující problematiku z hlediska programu Windows Explorer:
http://windowsxp.mvps.org/slowrightclick.htm
A na závěr problematika Shell Extensions z pohledu vývojáře:
MSDN.
S problémem vadných Shell Extensions zápasíme roky, omluvte proto tento rozvleklý příspěvek. Byl bych rád, kdyby uživatelé měli možnost pochopit jádro problému. Pokud je něco nejasně popsáno, klidně se ptejte.