Vista: Set global command failed on WSH

Celý deň nejde Wowko, tak sa hrám zo sieťou, skúšam latenciu a mením TCP Autotuning nastavenia. Vypnutie bola hračka: netsh interface tcp set global autotuninglevel=di­sabled. Nahodenie auto tuning späť na hodnotu normal už bolo problematickejšie vďaka chybe:

Set global command failed on WSH Systém nemôže nájsť zadaný súbor.

Po inštalácii Service Pack 2 na Vistu pribudlo v kontexte netsh interface tcp nové nastavenie heuristics ktoré pri hodnote wsh=default robí problém a neumožňuje nastaviť autotuninglevel=nor­mal (všetky ostatné hodnoty je možné nastaviť.

Zadal som teda

netsh > int tcp
netsh interface tcp > set heuristics enabled
Ok.
netsh interface tcp > set global autotuninglevel=normal
Ok.

A už to beží. Zatiaľ neviem čo je tá nová heuristika, ale pingy to veľmi neovplyvňuje. Za to Wowko furt a furt nič. Zrejme si odpočiniem od raidy.

Prípad padajúceho Prieskumníka (aka explorer.exe)

Mám teraz doma nanovo preinštalovanú Vistu Ultimate x64 a keďže veľmi veľa programujem, mám tu plno nástrojov na vývoj: Visual Studio, WinDbg, MSDN Library s dokumentáciou, Apache na lokálny SVN server, samozrejme Tortoise SVN (x86 aj x64 bit verzie, aby kontextové menu fungovalo správne v Exploreri aj v Total Commanderi, ktorý je len 32bitový). Nesmie chýbať virtuálna cd-romka – pomocou Virtual CD 9 – a NOD32 Antivirus 4.

Potreboval som nainštalovať Windows SDK, tak som pripojil .iso image a chvíľu počkal. Autorun sa nespustil, takže som šiel do Štart > Počítač, pravý klik na cd-romku, chvíľu sa nič nedialo a nasledoval Dr. Watson, ktorý mi oznámil, že program Prieskumník sa musí reštartovať.

Na to že som ešte nestihoval nainštalovať rôzne bety a iné pofidérne programy a mám tu len tie o ktorých viem, že sú veľmi stabilné, začal Prieskumník vo Viste padať celkom rýchlo. Prvé podozrenie padlo na chybný Tortoise SVN, ktorý je zaregistrovaný do exploreru a Virtual CD ktorý do neho tiež pridáva vlastné kontextové menu. Stačí sa len dopátrať ku skutočnej príčine.

Mark Russinovich má vynikajúce články na svojom blogu o možnostiach hľadania chýb v padajúcich programoch a článok The Case of the Random IE and WMP Crashes mi naozaj pomohol a konečne som mal možnosť si skúsiť tento typ troubleshootingu.

Vo WinDbg sa stačí pripojiť na existujúci proces: File > Attach to a Process… > explorer.exe a debugovanie môže začať. WinDbg sleduje, čo sa deje v Prieskumníkovi a keď som klikol pravým na cd-romku, hneď sa zastavil na výnimke:

V Call Stacku bolo vidieť, že Virtual CD DLLka uvoľňovala pämať a zrejme tam mali chybičku.

Odskúšal som si aj utilitu adplus.vbs, ktorá je súčasťou Windows Debugging Tools. Tento skript pripojí debugger na existujúci proces (alebo spustí nový proces) a zaznamenáva 1st a 2nd chance výnimky, ktoré nastanú v programe, zaloguje ju a vytvorí memory dump z ktorého sa dajú vyčítať veľmi cenné informácie.
1st chance výnimka je taká, ktorá je v programe odchytená a viacej-menej si s ňou dokáže poradiť.
2nd chance výnimky sú všetký neodchytené výnimky a teda spôsobujú ukončenie procesu.

cscript adplus.vbs -crash -pn explorer.exe -o C:\dump

Adplus.vbs zaznamenal do logu 1st chance AccessViolation exception v <Unloaded_vc9ex­tse64.dll>+0×5f84 a okamžite aj 2nd chance AccessViolation exception čo znamená, že tam je bug.

--- 2nd chance AccessViolation exception ----
---------------------------------------------------------------

Call Site
<Unloaded_vc9extse64.dll>+0x5f84
0x1`00000000
0x7f24f90
0x4ded7a8
0x360033`00380033
0x7fe`00000037
<Unloaded_vc9extse64.dll>+0xf1c8

Čo s takouto chybnou knižnicou? Virtual CD som používal v staršej verzii, najnovšia 9.3.0 je opravená. Nie vždy však môže byť opravená verzia dostupná. V takom prípade treba knižnicu zakázať napríklad pomocou ShellExView. Veľmi často podobné padanie spôsobujú staré DivX a xvid kodeky, keď vytvárajú náhľady.

Prípad nefungujúceho Štart menu vo Windows Vista

Pred bedmintonom som sa štandardne zastavil v bývalej robote vyzdvihnúť kolegov a jeden z nich mal problém s Vistami. Firemný noťas, 32bit Vista Business a už to bude nejaký ten rok, čo je nainštalovaná. Keďže to je vývojársky a domáci komp, je tam nainštalovaných veľa rôznych softov.

Dnes sa mi sťažoval, že vo Viste nefunguje Štart menu a nie je vôbec pokrok oproti Windows 95 kde fungovalo bez problémov. Windows spúšťal z menu iba niektoré programy. Fungovali z plochy, z rýchleho spustenia a aj z ponuky Všetky programy. Z úvodného Štart menu alebo s pomocou vyhľadávania nefungovali.
Hlavne sa jednalo o programy inštalované cez Microsoft Installer – MS Office, Acrobat, či Cisco VPN klient.

Pomocou Process Monitoru som zistil, že sa spúšťajú iba obyčajné .lnk odkazy. Štart menu však obsahuje aj odkazy, ktoré sú uložené v Registroch v časti HKLM\SOFTWARE\Mi­crosoft\Window­s\CurrentVersi­on\Installer\U­serData\S-1–5–18\Components.

Napríklad Acrobat Reader je uložený pod kľúčom 9579C59FFA311­4E44AB6BD2D1806D835\68AB­67CA7DA71501B7449A010000­0010 kde má záznam typu REG_SZ s uvedeným cestou k AcroRd32.exe.

(Screenshot je z XPéčok, lebo na nich píšem tento zápisok 🙂 )

Explorer už vie, kde sa odkaz na program náchadza a teda za normálnych okolností by File Monitor zobrazil tieto udalosti:

  1. Explorer.EXE 3040 ReadFile C:\Program Files\Adobe\Reader 9.0\Reader\AcroR­d32.exe SUCCESS
  2. Explorer.EXE 3040 Process Create C:\Program Files\Adobe\Reader 9.0\Reader\AcroR­d32.exe SUCCESS
  3. AcroRd32.exe 3692 Process Start SUCCESS Parent PID: 3040
  4. AcroRd32.exe 3692 Thread Create SUCCESS Thread ID: 2604

Explorer však ani nezačal načítavať Acrobat z disku, ani vytvárať nový proces.

Po chvíľke googlenia som našiel zmienku o nefungujúcom menu vo Viste s podobnými symptómami na Winmatrix fóre – Vista Start Menu Broken?. Bola tam zmienka o utilitke ShellExView, ktorá vie zobraziť všetky COM+ rozšírenia zaregistrované do Exploreru (a že tých rozšírení je veľa – čistá inštalácia Windows XP SP3 ich má okolo 250),

Kolega mal v počítači rôzne rozšírenia do kontextového menu, na vytváranie náhľadov a iných vecí. Niektoré sa dali identifikovať podľa výrobcu (Real Networks, RAR Labs, Tortoise SVN), jedna .dllka bola no-name. Po vypnutí všetkých neštandardných dlliek Štart menu začalo fungovať. Postupným skúšaním sme zistili, že problém spôsobovala práve komponenta AdCntxtM.dll s názvom AdCtxtM Dynamic Link Library, ktorá má neznámeho výrobcu. V systéme je zaregistrovaná pod GUID {AA6639D1-CE2B-11D5-AB4D-006097A79E23} a nachádza sa v System32 priečinku: C:\Windows\sys­tem32\AdCntxtM­.dll.

Prípad niekoľko dní nefungujúceho Štart menu sa mi nakoniec podarilo opraviť bez formátovania, reinštalácie a iných zdĺhavých procedúr 😉 Za hodinku sa to dá opraviť, stačí však poznať správne nástroje.