فرق بین پوشههای System32 و SysWOW64 ویندوز چیست؟
در نسخههای ۶۴ بیتی ویندوز، دو پوشهی Program Files جداگانه داریم. ولی همه چیز به همین دو پوشه ختم نمیشود. علاوه بر اینها، دو فهرست سیستمی مجزا نیز داریم که کتابخانههای DLL و فایلهای اجرایی در آن قرار دارد: System32 و SysWOW64. برخلاف این دو پوشه، System32 پر از فایلهای ۶۴ بیتی و SysWOW64 پر از فایلهای ۳۲ بیتی است.
System32 چیست؟
گویا آی تی: فهرست System32 حاوی فایلهای سیستمی ویندوز است، یعنی هم فایلهای DLL که توسط برنامهها استفاده میشوند و هم فایلهای EXE که بخشی از خود ویندوز هستند. اگرچه اکثر فایلهایی که در این فهرست قرار دارد بخشی از سیستم عامل ویندوز است، ولی گاهی اوقات برنامههای شخص ثالث فایلهای DLL خود را درون این پوشه هم نصب میکنند.
اپلیکیشنهایی که روی سیستم شما اجرا میشوند ممکن است در پوشهی Program Files یا هر جای دیگری نصب شده باشند، اما اغلب کتابخانههای سیستمی خود را از همین پوشهی System32 دریافت میکنند.
جداسازی کتابخانههای ۳۲ و ۶۴ بیتی
در نسخههای ۶۴ بیتی ویندوز، مسیر C:Program Files را دارید که برنامههای ۶۴ بیتی به همراه فایلهایشان در آن قرار دارند، و مسیر C:Program Files (x86) که برنامههای ۳۲ بیتی به همراه فایلهایشان در آن جا ذخیره شدهاند. بهتر است این فایلها از هم جدا شده باشند، چون برنامههای ۶۴ بیتی به فایلهای DLL ۶۴ بیتی و برنامههای ۳۲ بیتی به فایلهای DLL ۳۲ بیتی نیاز دارند.
اگر یک برنامهی ۳۲ بیتی به یک فایل DLL نیاز داشته باشد و نسخهی ۶۴ بیتی آن را پیدا کرده و سعی کند آن را اجرا نماید، برنامه کرش خواهد کرد. با جدا کردن نرمافزارهای ۶۴ بیتی و ۳۲ بیتی در دو پوشهی Program Files مختلف، ویندوز اطمینان مییابد که فایلها با هم قاطی نشود و مشکلی به وجود نیاید.
با این حال، همهی فایلهای DLL در Program Files ذخیره نمیشوند. بسیاری از کتابخانههای سراسری سیستم در مسیر C:System32 قرار دارند و بعضی از برنامهها هم کتابخانههای خود را همان جا قرار میدهند. پس همان طور که ویندوز دو پوشهی Program Files جداگانه برای نسخههای ۳۲ و ۶۴ بیتی دارد، پوشهی System32 هم دو نسخهی جداگانهی ۳۲ و ۶۴ بیتی دارد.
System32 و SysWOW64
همهی برنامههای ۳۲ بیتی در یک کامپیوتر ۳۲ بیتی در داخل مسیر C:Program Files ذخیره میشود و مسیر کتابخانههای سراسری سیستم هم C:System32 است.
برنامههای ۶۴ بیتی در یک کامپیوتر ۶۴ بیتی در داخل مسیر C:Program Files ذخیره میشود و پوشهی سراسری C:WindowsSystem32 هم حاوی کتابخانههای ۶۴ بیتی میباشد. در این دستگاه، برنامههای ۳۲ بیتی در مسیر C:Program Files (x86) ذخیره میشود و پوشهی سراسری سیستم هم C:WindowsSysWOW64 است.
یعنی در پوشهی System32 برخلاف اسمش که حاوی عدد ۳۲ است، کتابخانههای ۶۴ بیتی وجود دارد. و در پوشهی SysWOW64 هم برخلاف اسمش که حاوی عدد ۶۴ میباشد – حداقل در ویندوزهای ۶۴ بیتی – کتابخانههای ۳۲ بیتی وجود دارد.
در حالت کلی نیازی به دانستن این اطلاعات وجود ندارد چون سیستم عامل ویندوز و برنامهها خودشان به طور خودکار فایلها را در محل صحیح قرار داده و از پوشهی مناسب استفاده میکنند. اما اگر بخواهید به صورت دستی یک فایل DLL را در محل مناسب نصب کنید یا بخواهید فایلی را که از قبل نصب شده vh پیدا کنید – که البته خیلی بعید است – باید این چیزها را بدانید.
توضیحاتی دربارهی WOW64
بخشی از اسم WOW64 به نرمافزار Windows 32-bit on Windows 64-bit اشاره دارد که قسمتی از سیستم عامل است. این نرمافزار به ویندوز اجازه میدهد تا برنامههای ۳۲ بیتی را بر روی نسخههای ۶۴ بیتی این سیستم عامل اجرا کند. WoW64 دسترسی فایلها را هدایت میکند تا مطمئن شود که عملکرد برنامهها با اختلال مواجه نمیشود.
برای مثال اگر روی یک ویندوز ۶۴ بیتی یک برنامهی ۳۲ بیتی نصب کنید و برنامه سعی کند در مسیر C:Program Files بنویسد، WoW64 این آدرس را به C:Program Files (x86) تغییر میدهد. و اگر برنامه بخواهد به پوشهی C:WindowsSystem32 دسترسی داشته باشد، WoW64 آن را به مسیر C:WindowsSysWOW64 هدایت میکند. این کار در ویندوز با استفاده از یک راهبر سیستمی فایل انجام میشود.
همهی این اتفاقات به طور خودکار و در پسزمینهی سیستم انجام میشود. حتی لازم نیست خود برنامه بداند که دارد روی یک سیستم عامل ۶۴ بیتی اجرا میشود، چون به این شکل برنامههای ۳۲ بیتی هم میتوانند بدون تغییر بر روی ویندوزهای ۶۴ بیتی اجرا گردند. WOW64 دسترسی رجیستری را هم بازهدایت میکند تا مطمئن شود که برای برنامههای ۳۲ و ۶۴ بیتی در رجیستری فضای مجزا وجود داشته باشد.
اما چرا System32 ۶۴ بیتی و SysWOW64 ۳۲ بیتی است؟
به نظر میرسد پاسخ این باشد که بسیاری از اپلیکیشنهای ۳۲ بیتی طوری طراحی شدهاند که حتماً باید از فهرست C:WindowsSystem32 استفاده کنند. وقتی توسعهدهندگان مجدداً این اپلیکیشنها را برای نسخههای ۶۴ بیتی ویندوز کامپایل میکنند، همچنان از همان فهرست C:WindowsSystem32 استفاده میشود.
مایکروسافت هم به جای این که نام این فهرست را تغییر دهد یا توسعهدهندگان را مجبور کند که فایلهای خود را به پوشهی جدید منتقل کنند (عملی که باعث از کار افتادن خیلی از برنامهها میشود)، صرفاً پوشهی System32 را به عنون فهرست استاندارد کتابخانههای سیستمی رها کرده است. در عوض یک فهرست جدید برای اپلیکیشنهایی ساخته که در لایهی WoW64 کار میکنند، به همین خاطر اسم این پوشه SysWOW64 است. اگر به این موضوع دقیقتر نگاه کنید، متوجه میشوید که علت این نامگذاری چه بوده است.
بله، هنوز هم عجیب است که اسم یک پوشه حاوی عدد ۳۲ باشد ولی از آن برای برنامههای ۶۴ بیتی استفاده شود. شاید بهتر بود در همان دههی ۹۰ میلادی که مسیر C:WindowsSystem32 توسط این شرکت ساخته شد، این اتفاق را پیشبینی میکردند. ولی هرچند با یک نامگذاری مناسبتر میشد از این مورد جلوگیری کرد، ولی حالا این مسئله دیگر آن قدر اهمیت ندارد که به خاطرش برنامههای زیادی از کار بیفتد یا کلی زحمت اضافی برای توسعهدهندگان به وجود بیاید. این یعنی حالا حالاها باید با همین دو پوشهی System32 و SysWOW64 سر کنیم.