Windows অ্যাপ সামঞ্জস্য কীভাবে কাজ করে ── সামঞ্জস্য মোড, shim ও Compatibility Administrator দিয়ে পুরনো অ্যাপ বাঁচিয়ে রাখা
· Go Komura · Windows, সামঞ্জস্য মোড, Shims, অ্যাপ সামঞ্জস্য, Compatibility Administrator, পুরনো সম্পদের পুনর্ব্যবহার, Windows ডেভেলপমেন্ট, বিদ্যমান সিস্টেম
«দশ বছরের পুরনো ব্যবসায়িক অ্যাপ যার সোর্স কোড হারিয়ে গেছে নতুন Windows 11 PC-তে শুরু হয় না। প্রপার্টি ডায়ালগের Compatibility ট্যাবে ‘Windows XP’ টিক করলাম আর সোজা চলল। — আসলে কী হচ্ছে? এতে নির্ভর করে থাকা কি ঠিক?» এ ধরনের পরামর্শ আমরা প্রায়ই শুনি।
একটি চেকবক্স কিছু চালিয়ে দিলে অস্বস্তি স্বাভাবিক। জাদুর মতো দেখা সামঞ্জস্য মোডের আসল পরিচয় ছোট কোড টুকরোর সংগ্রহ যাকে shim বলে যা অ্যাপ ও Windows API-এর মাঝে বসে «মিথ্যা» ফেরায়। Windows নিজেই এই অস্থায়ী উপায় ব্যাপকভাবে ব্যবহার করে যাতে অনেক প্রজন্মের অ্যাপ চলতে থাকে, আর ব্যবস্থার কিছু অংশ ব্যবহারকারী ও অ্যাডমিনিস্ট্রেটরকে খুলে দেয়।
ব্যবস্থা না বুঝে ব্যবহার করলে আয়ু-বৃদ্ধি হয়ে যায় «আমরা ছুঁতে পারি না কারণ জানি না কেন চলে» অস্থির। ব্যবস্থা বুঝলে কারণসহ সিদ্ধান্ত নিতে পারেন কতদূর নিরাপদে নির্ভর করা যায়, কী ভাঙবে, আর কখন আবার লিখতে হবে।
flowchart TB
accTitle: ব্যবস্থা বোঝা আয়ু-বৃদ্ধির গুণ বদলায়
accDescr: ব্যবস্থা না বুঝে সামঞ্জস্য মোড ব্যবহার অস্থির আয়ু-বৃদ্ধির দিকে নিয়ে যায় যা ছোঁয়ার সাহস হয় না; ব্যবস্থা বোঝা কারণসহ সিদ্ধান্ত দেয় কতদূর নির্ভর কী ভাঙবে আর কখন আবার লিখবেন
unknown["ব্যবস্থা না বুঝে ব্যবহার"] --> fear["অস্থির আয়ু-বৃদ্ধি যা ছোঁয়ার সাহস হয় না"]
known["ব্যবস্থা বোঝার পর ব্যবহার"] --> judge["কারণসহ সিদ্ধান্ত"]
judge -.-> j1["কতদূর নির্ভর করা যায়"]
judge -.-> j2["কী এটা ভাঙবে"]
judge -.-> j3["কখন আবার লিখতে হবে"]
চিত্র 1: একই আয়ু-বৃদ্ধির জন্যও গুণ আলাদা ব্যবস্থা না জানার উদ্বেগ ও বোঝার ওপর ভিত্তি করা সিদ্ধান্তের মধ্যে।
ছোট-মাঝারি ব্যবসার IT কর্মী ও পুরনো ব্যবসায়িক অ্যাপ সামলানো Windows অ্যাপ ডেভেলপারদের লক্ষ্য করে এই নিবন্ধ Microsoft Learn প্রাথমিক উৎস থেকে সেই shim ব্যবস্থা সাজায় যা সামঞ্জস্য মোডের আসল পরিচয়, প্রতিনিধি shim কী করতে পারে, Compatibility Administrator দিয়ে সাংগঠনিকভাবে কীভাবে প্রয়োগ করবেন, যে সীমা shim বাঁচায় না, আর আয়ু-বৃদ্ধি ও মাইগ্রেশনের মধ্যে কীভাবে সিদ্ধান্ত নেবেন।
1. আগে উপসংহার
- সামঞ্জস্য মোডের আসল পরিচয় shim (সামঞ্জস্য স্তর)। Compatibility ট্যাবের সেটিং
HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers-এ লেখা হয়, আর শুরুর সময় সেই প্রক্রিয়ায় shim বান্ডেল প্রয়োগ হয়।12 - Shim user-mode API হুক যা import address table (IAT) আবার লেখে। অ্যাপ Windows API ডাকে সেই পথ কেটে পুরনো Windows যে উত্তর দিত সেই উত্তর ফেরায়। OS নিজে বদলায় না।3
- Shim যা করতে পারে তা অ্যাপে কোড সারানোর একই সীমা। নিরাপত্তা ব্যবস্থা ঘেরতে পারে না, আর কার্নেল-মোড (ডিভাইস-ড্রাইভার) সমস্যা সারাতে পারে না।3
- Microsoft অনেক তৈরি shim পাঠায় — সংস্করণ মিথ্যা, ফাইল-পথ পুনর্ম্যাপিং, রেজিস্ট্রি নকল, অ্যাডমিনিস্ট্রেটর যাচাইয়ের নকল, আরও। Compatibility Administrator থেকে আলাদা EXE-এ প্রয়োগ করতে পারেন।4
- Windows নিজেই ডিফল্টে shim ব্যবহার করে। OS-স্ট্যান্ডার্ড সামঞ্জস্য ডেটাবেস (.sdb) প্রতি লঞ্চে মেলানো হয়, আর PCA (Program Compatibility Assistant) সমস্যা শনাক্ত করে সামঞ্জস্য সেটিং স্বয়ংক্রিয়ও প্রয়োগ করতে পারে।15
- «যেন পুরনো Windows-এর মতো উত্তর দেওয়া» এখন ডিফল্ট। Windows 8.1 থেকে
GetVersionExসেই OS সংস্করণ ফেরায় না যা অ্যাপ ম্যানিফেস্টে ঘোষণা করেনি। সামঞ্জস্য মোড সেই ব্যবস্থার সম্প্রসারণ।67 - Shim ১৬-বিট অ্যাপ, কার্নেল-ড্রাইভার নির্ভরতা বা সরাসরি হার্ডওয়্যার অ্যাক্সেসে কাজ করে না। বিশেষ করে ১৬-বিট অ্যাপ ৬৪-বিট Windows-এ একেবারে চলতে পারে না।8
- যে অ্যাপ «অ্যাডমিনিস্ট্রেটর চায় কিন্তু সত্যি দরকার নেই» তাদের জন্য RunAsInvoker স্ট্যান্ডার্ড পদক্ষেপ।
__COMPAT_LAYER=RunAsInvokerউন্নয়ন অনুরোধ চেপে অ্যাপ স্ট্যান্ডার্ড অনুমতির নিচে চালায়।9 - Shim-এর নিচে চলা মানে আপাতত আয়ু বাড়ানো যায়, কিন্তু আসল পথ «shim ছাড়া চালানো»। আয়ু বাড়ানোর সিদ্ধান্ত নিলে কোন shim চালায় তা লিখে রাখুন আর সেটা আবার-লেখার সিদ্ধান্তের উপাদান হিসেবে পরিচালনা করুন।
2. অ্যাপ সামঞ্জস্যের বড় ছবি — পশ্চাৎ-সামঞ্জস্য স্তর যা Windows-এর ইতিমধ্যে আছে
Shim-এর কথা বলার আগে পুরনো অ্যাপের জন্য Windows-এর ইতিমধ্যে যে ব্যবস্থা আছে তার তালিকা। মানুষ যখন বলে «সামঞ্জস্য মোডে চলতে শুরু করেছে», আসলে অ্যাপ বাঁচানো এ স্তরগুলোর একটি, বা কয়েকটির মিশ্রণ।
| স্তর | কী করে | সাধারণ লক্ষ্য |
|---|---|---|
| Shim (সামঞ্জস্য মোড) | API কল কেটে পুরনো Windows যে সাড়া দিত সেই সাড়া নকল করে | সাধারণত পুরনো OS-এর জন্য লেখা অ্যাপ |
| UAC ভার্চুয়ালাইজেশন (ফাইল / রেজিস্ট্রি) | অনুমতিহীন HKLM\Software বা Program Files লেখা প্রতি-ব্যবহারকারী VirtualStore-এ সরায় |
অ্যাডমিনিস্ট্রেটর অনুমতি ধরে লেখা ৩২-বিট অ্যাপ |
| WOW64 | ৬৪-বিট Windows-এ ৩২-বিট অ্যাপ যেমন আছে তেমন চালায় (রেজিস্ট্রি ও ফাইল সিস্টেমের ৩২-বিট ভিউ দেয়) | সাধারণত ৩২-বিট অ্যাপ |
| DPI ভার্চুয়ালাইজেশন | DPI-অজ্ঞাত অ্যাপকে ৯৬ DPI-তে আঁকা ধরে বিটম্যাপ টানিয়ে দেখায় | উচ্চ-DPI ডিসপ্লেতে পুরনো অ্যাপ |
UAC ভার্চুয়ালাইজেশন পরিবর্তনকালীন ব্যবস্থা যা ম্যানিফেস্টহীন ৩২-বিট ইন্টারঅ্যাকটিভ প্রক্রিয়ায় প্রযোজ্য, আর Microsoft নিজেই বলে এটা «অস্থায়ী প্রযুক্তি যা আমরা ভবিষ্যৎ Windows সংস্করণ থেকে সরাতে চাই»।10 Wow6432Node রিডাইরেকশন ও VirtualStore থেকে আসল ক্ষতি, আর কীভাবে সামলাবেন, বিস্তারে «Registry 32-bit/64-bit Redirection and Virtualization Pitfalls»-এ; এই নিবন্ধ shim কেন্দ্রে রাখে আর অন্য স্তর শুধু যতটা দরকার উল্লেখ করে।
flowchart TB
accTitle: UAC ভার্চুয়ালাইজেশন কোথায় বসে
accDescr: UAC ভার্চুয়ালাইজেশন ম্যানিফেস্টহীন ৩২-বিট ইন্টারঅ্যাকটিভ প্রক্রিয়ার পরিবর্তনকালীন ব্যবস্থা; লেখা প্রতি-ব্যবহারকারী VirtualStore-এ সরায় কিন্তু Microsoft নিজেই বলে এটা অস্থায়ী প্রযুক্তি যা ভবিষ্যৎ Windows থেকে সরানোর ইরাদা
proc["ম্যানিফেস্টহীন ৩২-বিট ইন্টারঅ্যাকটিভ প্রক্রিয়া"] --> uacv["UAC ভার্চুয়ালাইজেশন প্রযোজ্য"]
uacv --> vs["প্রতি-ব্যবহারকারী VirtualStore-এ সরানো"]
uacv -.-> tmp["অস্থায়ী প্রযুক্তি যা পরে সরানোর ইরাদা"]
চিত্র 2: UAC ভার্চুয়ালাইজেশন ম্যানিফেস্টহীন ৩২-বিট প্রক্রিয়ার পরিবর্তনকালীন ব্যবস্থা, আর স্থায়ীভাবে নির্ভর করা যায় না।
DPI ভার্চুয়ালাইজেশনে পাশের নোট: যে অ্যাপ DPI সচেতনতা ঘোষণা করেনি তাকে ৯৬ DPI (১০০%)-এ আঁকা ধরা হয়, আর Windows প্রদর্শনের জন্য বিটম্যাপ টানায়। তাই পুরনো অ্যাপ উচ্চ-DPI মনিটরে «ঝাপসা» দেখায়, আর Compatibility ট্যাবের «উচ্চ DPI স্কেলিং আচরণ ওভাররাইড» সেই সুইচ যা এই ভার্চুয়ালাইজেশন আচরণ বদলায়।11
flowchart TB
accTitle: DPI ভার্চুয়ালাইজেশন কীভাবে কাজ করে
accDescr: যে অ্যাপ DPI সচেতনতা ঘোষণা করেনি তাকে ৯৬ DPI-তে আঁকা ধরা হয়; Windows বিটম্যাপ টানায় তাই ঝাপসা দেখায় আর Compatibility ট্যাবের উচ্চ-DPI ওভাররাইড এই ভার্চুয়ালাইজেশন আচরণ বদলায়
app["অ্যাপ যা DPI সচেতনতা ঘোষণা করে না"] --> treat["৯৬ DPI-তে আঁকা ধরা হয়"]
treat --> stretch["প্রদর্শনের জন্য বিটম্যাপ টানা হয়"]
stretch --> blur["উচ্চ-DPI মনিটরে ঝাপসা দেখায়"]
tab["উচ্চ DPI স্কেলিং আচরণ ওভাররাইড"] -.->|ভার্চুয়ালাইজেশন আচরণ বদলায়| treat
চিত্র 3: DPI-অজ্ঞাত অ্যাপকে ৯৬ DPI ধরে টানা হয়; Compatibility ট্যাব ওভাররাইড এই ভার্চুয়ালাইজেশনের সুইচ।
3. Shim আসলে কী — IAT আবার লিখে API-এর মাঝে কাটা
3.1. অ্যাপ ও OS-এর মাঝে দাঁড়ানো «দোভাষী»
Windows এক্সিকিউটেবল (PE ফরম্যাট) বাইরের DLL-এর API import address table (IAT) দিয়ে ডাকে। অ্যাপ GetVersionEx ডাকলে সে শুধু IAT-এ লেখা ঠিকানায় লাফায়। Shim ব্যবস্থা সেটাই কাজে লাগায়। লোড সময়ে লক্ষ্য API-এর IAT এন্ট্রি shim কোডের ঠিকানায় আবার লিখে নিজেকে অ্যাপ ও Windows-এর মাঝে ঢোকায়। GetProcAddress দিয়ে গতিশীল পাওয়া API স্বয়ং GetProcAddress হুক করে সামলানো হয়।3
কাটার পর shim «বর্তমান OS সংস্করণ কী?»-এ পুরনো সংস্করণ নম্বর ফেরাতে পারে, বা লেখা যায় না এমন জায়গার ফাইল অ্যাক্সেস অন্যত্র পুনর্ম্যাপ করতে পারে, তারপর দরকার হলে আসল API ডাকে। অ্যাপের দিক থেকে «পুরনো Windows-এ চলছে»; OS-এর দিক থেকে «ভদ্র অ্যাপ চলছে» — shim দুয়ের মাঝের দোভাষী।
flowchart TB
accTitle: যে পথে shim API কল কাটে
accDescr: অ্যাপের API কল IAT দিয়ে যায়; লোড সময়ে IAT এন্ট্রি shim-এ আবার লিখলে shim কাটতে পারে পুরনো Windows-এর মতো সাড়া নকল করতে পারে তারপর দরকার হলে আসল API ডাকতে পারে
app["অ্যাপ"] -->|API কল| iat["IAT এন্ট্রি"]
iat -->|লোড সময়ে shim-এ আবার লেখা| shim["Shim (দোভাষী)"]
shim -->|দরকার হলে| api["আসল Windows API"]
shim -.-> lie["পুরনো Windows যে সাড়া দিত সেই সাড়া নকল করে"]
gpa["GetProcAddress দিয়ে কল"] -.->|হুক দিয়ে সামলানো| shim
চিত্র 4: Shim অ্যাপ ও Windows API-এর মাঝে কাটে। যা আবার লেখা হয় তা অ্যাপ-পক্ষ IAT; OS নিজে বদলায় না।
এই নকশা থেকে তিনটি গুরুত্বপূর্ণ বৈশিষ্ট্য আসে।3
- Shim অ্যাপ-পক্ষ কোড হিসেবে চলে। সে OS-এর অংশ নয়, তাই অ্যাপের মতোই নিরাপত্তা সীমাবদ্ধতার অধীন। Shim OS নিরাপত্তা ব্যবস্থা ঘেরতে পারে না, আর shim ব্যবহার করতে নিরাপত্তা সেটিং ঢিলা করার দরকার নেই।
- Shim যা সারাতে পারে, অ্যাপ-পক্ষ কোড সারানোও সারাতে পারে। Shim «সোর্স নেই / সারাতে পারি না» পরিস্থিতির বিকল্প; কোড সারানোর চেয়ে শক্তিশালী নয়।
- শুধু user mode। কার্নেল মোডে চলা ডিভাইস ড্রাইভারের সামঞ্জস্য সমস্যা shim সারাতে পারে না।
3.2. Shim ডেটাবেস (.sdb) ও মিলানো
«কোন EXE-এ কোন shim প্রয়োগ করবেন»-এর তালিকা shim ডেটাবেস, .sdb এক্সটেনশনের বাইনারি ফাইল। লক্ষ্য অ্যাপ এক্সিকিউটেবল ফাইল নাম, আকার, চেকসাম ও সংস্করণের মতো বৈশিষ্ট্যে (মিলানো বৈশিষ্ট্য) ডেটাবেসে নিবন্ধিত হয়, আর প্রক্রিয়া শুরুতে মেলে। প্রতিকারে আছে Appfix (shim) যা API হুক ঢোকায়, আর Apphelp যা «এই অ্যাপে সামঞ্জস্য সমস্যা আছে» বার্তা দেখায়। কয়েকটি shim ও ফ্ল্যাগের বান্ডেল সামঞ্জস্য স্তর (সামঞ্জস্য মোড)।1
মিস করা সহজ: এই মিলানো শুধু যে অ্যাপে সামঞ্জস্য মোড সেট আছে তাতে নয়, প্রতিটি প্রক্রিয়া লঞ্চে চলে। Windows হাজার হাজার পরিচিত অ্যাপের ফিক্সের OS-স্ট্যান্ডার্ড ডেটাবেস পাঠায় (ফাইল %WINDIR%\AppPatch-এর নিচে), আর আপনার PC-তে আজ প্রায় নিশ্চিত কোনো পুরনো অ্যাপ কারও নজর ছাড়া shim লাগানো অবস্থায় শুরু হয়। Microsoft-দেওয়া সামঞ্জস্য ফিক্স Windows-এর অংশ হয়ে আসে ও Windows Update দিয়ে আপডেট হয়।3
flowchart TB
accTitle: প্রক্রিয়া শুরুতে shim ডেটাবেস মিলানো
accDescr: প্রতিটি প্রক্রিয়া লঞ্চ shim ডেটাবেসের সাথে মেলে; নিবন্ধন মিলানো বৈশিষ্ট্যে মিললে Appfix shim ঢোকায় বা Apphelp বার্তা দেখায় নইলে প্রক্রিয়া যেমন আছে তেমন শুরু হয়
start["প্রক্রিয়া শুরু"] --> db[".sdb-এর সাথে মিলানো"]
db -.-> attr["ফাইল নাম আকার ইত্যাদি"]
db --> hit{"নিবন্ধন?"}
hit -->|হ্যাঁ| appfix["Appfix: shim ঢোকান"]
hit -->|হ্যাঁ| apphelp["Apphelp: বার্তা"]
hit -->|না| plain["যেমন আছে তেমন শুরু"]
layer["সামঞ্জস্য স্তর"] -.->|shim ও ফ্ল্যাগের বান্ডেল| appfix
চিত্র 5: মিলানো প্রতিটি প্রক্রিয়া লঞ্চে চলে, শুধু সামঞ্জস্য মোড সেট অ্যাপে নয়।
3.3. PCA — যে ব্যবস্থা shim স্বয়ংক্রিয় প্রয়োগ করে
আরেক পথ যাতে অ্যাডমিনিস্ট্রেটর না চেয়েও shim প্রয়োগ হতে পারে তা PCA (Program Compatibility Assistant)। PCA অ্যাপ চালনা দেখে, আর পরিচিত সামঞ্জস্য সমস্যার চিহ্ন পেলে ব্যবহারকারীকে ফিক্স প্রয়োগের প্রস্তাব দেয় বা কিছু ক্ষেত্রে সামঞ্জস্য সেটিং স্বয়ংক্রিয় প্রয়োগ করে। উদাহরণস্বরূপ মুক্ত DLL-এর ভেতর কোড ডেকে ক্র্যাশ করা অ্যাপকে PINDLL দেওয়া হয়, আর সুরক্ষিত Windows ফাইলে লেখা ব্যর্থ অ্যাপকে WRPMITIGATION।5
flowchart TB
accTitle: PCA সামঞ্জস্য সেটিং স্বয়ংক্রিয় কীভাবে প্রয়োগ করে
accDescr: PCA অ্যাপ চালনা দেখে আর পরিচিত সামঞ্জস্য সমস্যার চিহ্ন পেলে ব্যবহারকারীকে ফিক্স প্রয়োগের প্রস্তাব দেয় বা কিছু ক্ষেত্রে সামঞ্জস্য সেটিং স্বয়ংক্রিয় প্রয়োগ করে
run["অ্যাপ চালনা"] --> pca["PCA দেখে"]
pca --> sign{"পরিচিত সমস্যার চিহ্ন?"}
sign -->|হ্যাঁ| resp{"কোন ক্ষেত্র?"}
resp -->|প্রস্তাবে সামলানো| suggest["ফিক্স প্রয়োগের প্রস্তাব"]
resp -->|কিছু ক্ষেত্র| auto["সামঞ্জস্য সেটিং স্বয়ংক্রিয় প্রয়োগ"]
sign -->|না| none["যেমন আছে তেমন চালান"]
auto -.-> ex["উদাহরণ: PINDLL বা WRPMITIGATION"]
চিত্র 6: PCA অ্যাপ চালনা দেখে, আর পরিচিত সমস্যার চিহ্ন পেলে ফিক্স প্রস্তাব করে বা স্বয়ংক্রিয় প্রয়োগ করে।
«কিছু সেট করিনি, কিন্তু কোনো এক সময় সামঞ্জস্য মোড চেকবক্স চালু ছিল»-এর পরিচয় অনেক ক্ষেত্রে এটাই। ত্রুটিও নয় ভুল ক্লিকও নয়; Windows নকশা অনুযায়ী আচরণ করছে।
4. প্রতিনিধি shim কী করতে পারে
Microsoft প্রকাশিত তৈরি shim থেকে এই বাছাই ব্যবসায়িক অ্যাপের আয়ু বাড়াতে সত্যি প্রায়ই আসে।4
| Shim | কী করতে পারে (সারাংশ) |
|---|---|
| WinXPSP3VersionLie ও VersionLie পরিবার | OS-সংস্করণ কোয়েরিতে নির্দিষ্ট পুরনো সংস্করণ ফেরানো (সংস্করণ নকল) |
| CorrectFilePaths | লেখা যায় না বা নেই এমন ফাইল পথের অ্যাক্সেস অন্য জায়গায় পুনর্ম্যাপ |
| VirtualRegistry | রেজিস্ট্রি পড়া-লেখা সরানো বা নকল (সংস্করণ নকল ও অস্তিত্বহীন কী নকলসহ) |
| ForceAdminAccess | «আপনি কি Administrators গ্রুপের সদস্য?» যাচাইয়ে সাময়িক True ফেরানো |
| RunAsAdmin / RunAsHighest / RunAsInvoker | বাইরে থেকে ম্যানিফেস্টের requireAdministrator / highestAvailable / asInvoker-এর সমতুল্য চালনার স্তর দেওয়া |
| WRPMitigation | সুরক্ষিত OS ফাইল ও রেজিস্ট্রি কীতে লেখার সাফল্য নকল যাতে অ্যাপ এগোতে পারে |
| EmulateGetDiskFreeSpace | খালি ডিস্ক স্থান সর্বোচ্চ ২GB বলে (বড় ডিস্কে ওভারফ্লো করা অ্যাপের জন্য) |
| GlobalMemoryStatusLie | রিপোর্ট করা মেমরি-অবস্থা মান নকল (স্টার্টআপ মেমরি যাচাইয়ে ব্যর্থ অ্যাপের জন্য) |
| LoadLibraryRedirect | অ্যাপ পাঠানো পুরনো সিস্টেম DLL-এর বদলে Windows-এর বর্তমান DLL লোড |
তালিকা দেখলে বেশিরভাগ shim «সেই মিথ্যা যা পুরনো অ্যাপ যে উত্তর আশা করে তা ফেরায়»। ডিস্ক সর্বোচ্চ ২GB, OS XP, আপনি অ্যাডমিনিস্ট্রেটর — তারা শুধু সেই প্রক্রিয়ার ভেতর অ্যাপের জন্মের যুগের বিশ্বদৃষ্টি আবার তৈরি করে।
সংস্করণ নকল হয়ে গেছে «অফিসিয়াল ডিফল্ট আচরণ»
সংস্করণ নকল বিশেষ হ্যাক নয়। Windows 8.1 থেকে GetVersionEx যে মান ফেরায় তা অ্যাপের ম্যানিফেস্টে নির্ভর। ম্যানিফেস্টের <compatibility> অংশে <supportedOS> ঘোষণাহীন অ্যাপকে, আসল OS যাই হোক, সবসময় Windows 8-সমতুল্য (6.2) দেওয়া হয়। ঘোষণা থাকলে ঘোষিত OS-এর মধ্যে সর্বোচ্চ পর্যন্ত মান ফেরে (যেমন Windows 8.1 GUID পর্যন্ত ঘোষণা থাকলে Windows 11-এও 6.3 পান)।67
তাই «অ্যাপ যে Windows সংস্করণ দেখে» এই স্তরিত ধাপে ঠিক হয়।
- ম্যানিফেস্টে ঘোষিত OS পর্যন্ত মান ফেরে (ঘোষণা না থাকলে 6.2)
- সামঞ্জস্য মোড (VersionLie-পরিবার shim) প্রয়োগ হলে নির্বাচিত OS-এর সংস্করণ ফেরে6
flowchart TB
accTitle: অ্যাপ যে OS সংস্করণ দেখে তা কীভাবে ঠিক হয়
accDescr: GetVersionEx-এর মান ম্যানিফেস্টে supportedOS ঘোষণা দিয়ে ঠিক হয়; ঘোষণা না থাকলে Windows 8-সমতুল্য 6.2 ঘোষণা থাকলে সর্বোচ্চ ঘোষিত OS পর্যন্ত মান আর VersionLie-পরিবার shim প্রয়োগ হলে নির্বাচিত OS সংস্করণে ওভাররাইট
q["GetVersionEx কোয়েরি"] --> m{"supportedOS ঘোষণা আছে?"}
m -->|না| v62["Windows 8-সমতুল্য (6.2) ফেরে"]
m -->|হ্যাঁ| decl["সর্বোচ্চ ঘোষিত OS পর্যন্ত মান"]
v62 --> lie{"VersionLie-পরিবার shim প্রয়োগ?"}
decl --> lie
lie -->|হ্যাঁ| fake["সামঞ্জস্য মোডে বেছে নেওয়া OS মান"]
lie -->|না| asis["মান যেমন আছে তেমন ফেরে"]
চিত্র 7: অ্যাপ যে Windows সংস্করণ দেখে তা ম্যানিফেস্ট ও shim-এর স্তরিত ধাপে ঠিক হয়।
যদি অভ্যন্তরীণ অ্যাপ «OS সংস্করণে শাখা করে আর বিভ্রান্তিকরভাবে 8 বিচার হয় যদিও এটা Windows 11», প্রথমে ম্যানিফেস্টের supportedOS ঘোষণা সন্দেহ করুন। উল্টো করে বললে সংস্করণ যাচাইয়ে শুরু অস্বীকার করা পুরনো অ্যাপ উচ্চ সম্ভাবনায় VersionLie shim দিয়ে পার হতে পারে। অনেক ক্ষেত্রে সে শুধু সংস্করণ নম্বর দেখে, আর আসল আচরণ নতুন OS-এ ঠিক।
flowchart TB
accTitle: সংস্করণ থেকে দুই লক্ষণ ও কীভাবে সামলাবেন
accDescr: অভ্যন্তরীণ অ্যাপ Windows 11 হয়েও 8 বিচার হলে ম্যানিফেস্টের supportedOS ঘোষণা সন্দেহ করুন; সংস্করণ যাচাইয়ে শুরু অস্বীকার পুরনো অ্যাপ উচ্চ সম্ভাবনায় VersionLie দিয়ে পার হতে পারে
sym1["Windows 11 হয়েও 8 বিচার"] --> fix1["supportedOS ঘোষণা সন্দেহ করুন"]
sym2["সংস্করণ যাচাইয়ে শুরু অস্বীকার"] --> fix2["VersionLie দিয়ে পার হওয়ার চেষ্টা"]
fix2 -.-> why["আসল আচরণ প্রায়ই নতুন OS-এ ঠিক"]
চিত্র 8: বিচার পুরনো হলে ম্যানিফেস্ট সন্দেহ করুন; শুরু অস্বীকার হলে VersionLie সন্দেহ করুন।
5. সামঞ্জস্য মোড চেকবক্স কী করে
প্রপার্টিজ → Compatibility ট্যাবের সেটিং রেজিস্ট্রির AppCompatFlags\Layers কীতে সংরক্ষিত হয়। DXGI অ্যাপ-সামঞ্জস্য সেটিং ইত্যাদি সামঞ্জস্য স্তর নির্দিষ্ট করার জায়গা হিসেবে একই কী ব্যবহার করে।2 আসলে দেখি।
reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
যে EXE-এ Compatibility ট্যাবে «Windows XP (Service Pack 3)», «এই প্রোগ্রাম অ্যাডমিনিস্ট্রেটর হিসেবে চালান» ও «উচ্চ DPI স্কেলিং আচরণ ওভাররাইড» সেট করেছেন, নিচের মতো মান দেখবেন।
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
C:\LegacyApp\Gyomu.exe REG_SZ ~ WINXPSP3 RUNASADMIN HIGHDPIAWARE
চেকবক্স আইটেম ও মানের প্রতিনিধি মিল (Windows 11-এ নিশ্চিত; আইটেম নাম ও মান OS সংস্করণে বদলাতে পারে)।
| Compatibility ট্যাব আইটেম | লেখা মান (উদাহরণ) | আসলে কী |
|---|---|---|
| সামঞ্জস্য মোড: Windows XP (Service Pack 3) | WINXPSP3 | সংস্করণ নকল ও আরও কয়েকটি shim বাঁধা সামঞ্জস্য স্তর |
| কমানো রঙ মোড (৮-বিট / ২৫৬ রঙ) | 256COLOR | পুরনো রঙ মোডের জন্য শিথিলতা |
| 640 × 480 স্ক্রিন রেজোলিউশনে চালান | 640X480 | নিম্ন রেজোলিউশনে চালানো |
| ফুলস্ক্রিন অপটিমাইজেশন অক্ষম | DISABLEDXMAXIMIZEDWINDOWEDMODE | ফুলস্ক্রিনে আঁকার অপটিমাইজেশন অক্ষম |
| উচ্চ DPI স্কেলিং আচরণ ওভাররাইড (অ্যাপ্লিকেশন) | HIGHDPIAWARE | DPI ভার্চুয়ালাইজেশন থামান (বিটম্যাপ টানা)11 |
| এই প্রোগ্রাম অ্যাডমিনিস্ট্রেটর হিসেবে চালান | RUNASADMIN | শুরুতে উন্নয়ন অনুরোধ |
তিনটি কথা রাখুন।
- «এই প্রোগ্রাম অ্যাডমিনিস্ট্রেটর হিসেবে চালান» একই জায়গায় লেখা হয়। সামঞ্জস্য মোড ও উন্নয়ন ফ্ল্যাগ একই Layers কীতে একসাথে থাকে, আর সেখান থেকেই বিভ্রান্তি «সামঞ্জস্য মোড সেট করলাম আর উন্নয়ন এল / উধাও» জন্মায়। মান সরাসরি দেখলে দুটো আলাদা হয়।
- HKCU-তে যা লেখা তা «সেই ব্যবহারকারীর সেটিং»। ট্যাবের «সব ব্যবহারকারীর জন্য সেটিং বদলান» থেকে সেট করলে HKLM পক্ষের সমনাম কীতে লেখা হয় ও সব ব্যবহারকারীতে প্রযোজ্য। ইমেজিংয়ে বিতরণ করার সময় সচেতন থাকুন কোন পক্ষে লিখছেন।
- চেকবক্স শুধু তৈরি স্তরের প্রবেশ। ট্যাব শুধু প্রতিনিধি স্তর বেছে নিতে দেয়; আলাদা shim বেছে জোড়া যায় না। সেটা পরের অধ্যায়ের Compatibility Administrator করে।
flowchart TB
accTitle: Compatibility ট্যাব সেটিং থেকে কার্যকর হওয়া পর্যন্ত পথ
accDescr: Compatibility ট্যাব সেটিং EXE পথ ও মান হিসেবে AppCompatFlags Layers কীতে সংরক্ষিত হয়; পরেরবার সেই EXE শুরু হলে লোডার মান পড়ে সংশ্লিষ্ট সামঞ্জস্য স্তর প্রক্রিয়ায় প্রয়োগ করে
tab["Compatibility ট্যাবে সেট"] --> reg["Layers কীতে EXE পথ ও মান সংরক্ষণ"]
reg --> boot["পরের EXE শুরু"]
boot --> loader["লোডার মান পড়ে"]
loader --> apply["প্রক্রিয়ায় সামঞ্জস্য স্তর প্রয়োগ"]
reg -.-> hkcu["HKCU শুধু সেই ব্যবহারকারী"]
reg -.-> hklm["HKLM সব ব্যবহারকারীতে প্রযোজ্য"]
চিত্র 9: চেকবক্স বাস্তবে Layers কীতে লেখা, আর প্রয়োগ হয় পরের শুরুতে।
6. Compatibility Administrator বাস্তবে — কাস্টম .sdb তৈরি ও বিতরণ
6.1. কীভাবে পাবেন, ও সতর্কতা
Compatibility Administrator Windows ADK (Windows Assessment and Deployment Kit)-এ অন্তর্ভুক্ত টুল।12 ইনস্টলের পর ৩২-বিট ও ৬৪-বিট উভয় সংস্করণ থাকে, আর ৩২-বিট অ্যাপের জন্য ৩২-বিট সংস্করণ ও ৬৪-বিট অ্যাপের জন্য ৬৪-বিট সংস্করণই ব্যবহার করতে হয়।13
আরেক গুরুত্বপূর্ণ সতর্কতা আছে। Compatibility Administrator উন্নীত (অ্যাডমিনিস্ট্রেটর) শুরু করে পরীক্ষা করলে UAC ভার্চুয়ালাইজেশন ও রিডাইরেকশন আসল ব্যবহারকারীর মতো আচরণ করে না, আর ভুল বিচার করতে পারেন «সারা গেছে»। ফিক্সের প্রভাব সবসময় আসল ব্যবহারকারীর মতো অ্যাকাউন্ট ও অনুমতিতে নিশ্চিত করুন।4
flowchart TB
accTitle: Compatibility Administrator ব্যবহারের দুই সতর্কতা
accDescr: ৩২-বিট অ্যাপের জন্য ৩২-বিট সংস্করণ ও ৬৪-বিট অ্যাপের জন্য ৬৪-বিট সংস্করণ ব্যবহার করুন আর ফিক্সের প্রভাব উন্নীত অবস্থায় নয় আসল ব্যবহারকারীর মতো অ্যাকাউন্ট ও অনুমতিতে নিশ্চিত করুন
app32["৩২-বিট অ্যাপ"] --> tool32["৩২-বিট সংস্করণ ব্যবহার করুন"]
app64["৬৪-বিট অ্যাপ"] --> tool64["৬৪-বিট সংস্করণ ব্যবহার করুন"]
elev["উন্নীত অবস্থায় পরীক্ষা"] -.-> wrong["ফিক্সের ভুল বিচার হতে পারে"]
user["আসল ব্যবহারকারীর মতো অনুমতিতে পরীক্ষা"] --> ok["প্রভাব নিশ্চিত করুন"]
চিত্র 10: ৩২-বিট বা ৬৪-বিট সংস্করণ বেছে নেওয়া, আর আসল ব্যবহারকারীর মতো অনুমতিতে নিশ্চিত করা, প্রবেশের সতর্কতা।
6.2. কাস্টম সামঞ্জস্য ডেটাবেস তৈরির পদ্ধতি
রূপরেখা নিম্নরূপ।14
- Compatibility Administrator-এর বাম ফলকে «Custom Databases»-এর নিচে নতুন ডেটাবেস তৈরি করে «Create New» → «Application Fix» বেছে নিন
- অ্যাপ নাম ও ভেন্ডর নাম দিন, আর লক্ষ্য EXE ফাইল নির্দিষ্ট করুন
- প্রয়োগ করার সামঞ্জস্য মোড (স্তর) বেছে নিন — আগে «Windows XP সামঞ্জস্য»-এর মতো বান্ডেল চেষ্টা করা ছোট পথ
- দরকার হলে আলাদা সামঞ্জস্য ফিক্স (shim) যোগ করুন — শুধু VersionLie বা শুধু CorrectFilePaths-এর মতো ন্যূনতম সেটে সরু করতে পারেন
- মিলানো শর্ত (ফাইল আকার, চেকসাম, সংস্করণ ইত্যাদি) নিশ্চিত করে সেভ করুন
মিলানো শর্ত «এটা শুধু এই EXE-এ প্রয়োগ করুন»-এর চাবিকাঠি। ডিফল্ট মৌলিক শর্ত সাধারণত যথেষ্ট, কিন্তু আমরা সুপারিশ করি অ্যাপ সংস্করণ শনাক্ত করতে পারে এমন শর্ত রাখুন। তাতে সেই দুর্ঘটনা আটকে যেখানে ভেন্ডর পরে সারানো সংস্করণ পাঠালে পুরনো মিথ্যা নতুন সংস্করণে লাগতে থাকে।1415
flowchart TB
accTitle: কাস্টম সামঞ্জস্য ডেটাবেস তৈরির পদ্ধতি
accDescr: নতুন ডেটাবেসে Application Fix তৈরি করুন অ্যাপ নাম ও লক্ষ্য EXE নির্দিষ্ট করুন আগে সামঞ্জস্য-মোড বান্ডেল চেষ্টা করুন তারপর দরকার হলে আলাদা shim-এ সরু করুন মিলানো শর্ত নিশ্চিত করে সেভ করুন
new["নতুন ডেটাবেস তৈরি"] --> fix["Application Fix বেছে নিন"]
fix --> info["অ্যাপ নাম ও লক্ষ্য EXE নির্দিষ্ট করুন"]
info --> layer["সামঞ্জস্য-মোড বান্ডেল চেষ্টা"]
layer --> single["দরকার হলে আলাদা shim-এ সরু"]
single --> match["মিলানো শর্ত নিশ্চিত করে সেভ"]
match -.-> ver["সংস্করণ শনাক্ত করার শর্ত রাখুন"]
চিত্র 11: Application Fix-এ আগে সামঞ্জস্য-মোড বান্ডেল চেষ্টা করুন, ন্যূনতম সেটে সরু করুন, আর মিলানো শর্তে লক্ষ্য সীমিত করুন।
তৈরি .sdb আগে যাচাই মেশিনে পরীক্ষা করুন। ইরাদা অনুযায়ী চললে সংগঠনে রোল আউট করুন।
6.3. sdbinst দিয়ে বিতরণ
প্রতিটি PC-তে কাস্টম .sdb প্রয়োগ করার কমান্ড sdbinst.exe (অ্যাডমিনিস্ট্রেটর অনুমতি লাগে)।15
:: Install (-q is silent with no confirmation)
sdbinst -q "C:\Deploy\MyCorpFixes.sdb"
:: Uninstall (by file)
sdbinst -q -u "C:\Deploy\MyCorpFixes.sdb"
:: Uninstall (by database GUID)
sdbinst -q -u -g {database GUID}
সাংগঠনিক-তৈনাতির কৌশল হিসেবে Microsoft সুপারিশ করে প্রতিটি অ্যাপের ইনস্টলারের সাথে আলাদা .sdb পাঠানোর বদলে এক কোম্পানি-ব্যাপী (বা বিভাগ-ভিত্তিক) কাস্টম ডেটাবেসে একত্র করে কেন্দ্র থেকে পরিচালনা করুন। যত বেশি ফিক্স, এক ডেটাবেস আপডেট ও আবার বিতরণ করা অনেক এক-লাইন ডেটাবেস ভাগ করার চেয়ে সহজ। কাস্টম ডেটাবেসের নিজস্ব GUID থাকে, আর একই GUID দিয়ে নতুন সংস্করণ ইনস্টল করলে পুরনো সংস্করণ স্বয়ংক্রিয় বদলায়, তাই আপডেট চালনাও সরল থাকে। বিতরণ নিজে এমন বিদ্যমান পথে রাখুন যা অ্যাডমিনিস্ট্রেটর অনুমতিতে চলতে পারে, যেমন MSI প্যাকেজ বা স্টার্টআপ স্ক্রিপ্ট।15
flowchart TB
accTitle: কাস্টম .sdb তৈরি থেকে বিতরণ পর্যন্ত পথ
accDescr: Compatibility Administrator-এ কাস্টম সামঞ্জস্য ডেটাবেস তৈরি করুন যাচাই মেশিনে পরীক্ষা করুন sdbinst দিয়ে প্রতিটি PC-তে প্রয়োগ করুন আর আপডেটে একই GUID দিয়ে নতুন সংস্করণ ইনস্টল করুন যাতে পুরনো স্বয়ংক্রিয় বদলায়
make["Compatibility Administrator-এ তৈরি"] --> test["যাচাই মেশিনে পরীক্ষা"]
test --> deploy["sdbinst দিয়ে প্রতিটি PC-তে প্রয়োগ"]
deploy --> update["একই GUID দিয়ে নতুন সংস্করণ ইনস্টল"]
update -.-> replace["পুরনো সংস্করণ স্বয়ংক্রিয় বদলায়"]
deploy -.-> inv["প্রোগ্রাম ও ফিচারে নিবন্ধিত"]
চিত্র 12: কাস্টম .sdb তৈরি, যাচাই ও sdbinst বিতরণ দিয়ে রোল আউট হয়, আর আপডেট GUID দিয়ে পরিচালিত হয়।
ইনস্টল করা কাস্টম ডেটাবেস «প্রোগ্রাম ও ফিচার (ইনস্টল অ্যাপ)»-এ আইটেম হিসেবে নিবন্ধিত হয়, তাই সেখান থেকেও ইনভেন্টরি ও সরানো নিশ্চিত করা যায়। কোন PC-তে কোন .sdb আছে সেই তথ্য সম্পদ-পরিচালনা লেজারের।
7. যেখানে কাজ করে না, ও সীমা
Shim রুপোর গুলি নয়। নকশা অনুযায়ী নিচের ক্ষেত্রে কাজ করে না।
- কার্নেল-মোড সমস্যা। Shim user-mode প্রক্রিয়ার ভেতর চলে, তাই ডিভাইস-ড্রাইভার অসামঞ্জস্য সারানো যায় না। পুরনো মাপার যন্ত্র, USB ডঙ্গল বা প্রিন্টারের ড্রাইভার Windows 11 সমর্থন না করলে অ্যাপ পক্ষে যাই প্রয়োগ করুন সমাধান হবে না। কার্নেলে চলা কোড, যেমন অ্যান্টিভাইরাস সফটওয়্যারের অংশ, একই।3
- ১৬-বিট অ্যাপ। ৬৪-বিট Windows ১৬-বিট অ্যাপ চালানো সমর্থন করে না। হ্যান্ডেলে ৬৪-বিট Windows-এ ৩২ বৈধ বিট থাকে আর ১৬-বিট অ্যাপে দেওয়ার জন্য কাটা যায় না, তাই শুরু
ERROR_BAD_EXE_FORMAT-এ ব্যর্থ হয়।8 অ্যাপ নিজে ৩২-বিট হলেও সেই যুগের প্যাকেজ আছে যার ইনস্টলার স্টাব ১৬-বিট, আর সেগুলো দেখায় «অ্যাপ চলত, কিন্তু ইনস্টল করা যায় না»। - সরাসরি হার্ডওয়্যার অ্যাক্সেস। শিল্প অ্যাপ যা ধরে নেয় I/O পোর্ট বা ভৌত মেমরি সরাসরি ছুঁতে পারে তাদের আধুনিক Windows-এ user mode থেকে তা করার অনুমতি আগে থেকেই নেই, আর সেই সীমা shim নকল করতে পারে না।
- নিরাপত্তা ব্যবস্থা ঘেরা। কারণ shim অ্যাপের মতোই নিরাপত্তা সীমাবদ্ধতার নিচে চলে, সে «অনুমতি না থাকায় করা যায় না»-কে সম্ভব করতে পারে না। ForceAdminAccess ও WRPMitigation শুধু যাচাই বা লেখার সাফল্য নকল করে যাতে অ্যাপ এগোতে পারে; তারা সত্যি সুরক্ষিত সম্পদ আবার লেখে না।34
- নিজের অখণ্ডতা যাচাই করা অ্যাপ। পুরনো কপি সুরক্ষা বা হস্তক্ষেপ শনাক্তকরণসহ অ্যাপ API হুককেই অস্বাভাবিক ধরে থেমে যেতে পারে।
flowchart TB
accTitle: যেখানে shim কাজ করে না
accDescr: Shim user-mode প্রক্রিয়ার ভেতর চলে তাই কার্নেল-মোড ড্রাইভার সমস্যা ১৬-বিট অ্যাপ সরাসরি হার্ডওয়্যার অ্যাক্সেস বা নিরাপত্তা ব্যবস্থা ঘেরায় কাজ করে না
shim["Shim (user mode-এ চলে)"] -->|কাজ করে না| drv["কার্নেল ড্রাইভার"]
shim -->|কাজ করে না| b16["১৬-বিট অ্যাপ"]
shim -->|কাজ করে না| hw["সরাসরি হার্ডওয়্যার অ্যাক্সেস"]
shim -->|কাজ করে না| sec["নিরাপত্তা ব্যবস্থা ঘেরা"]
b16 -.-> fmt["৬৪-বিটে শুরুই ব্যর্থ"]
sec -.-> fake["শুধু সাফল্য নকল যাতে অ্যাপ এগোয়"]
চিত্র 13: Shim শুধু user-mode আর কার্নেল, ১৬-বিট অ্যাপ, সরাসরি হার্ডওয়্যার অ্যাক্সেস বা নিরাপত্তা বাইপাস পর্যন্ত পৌঁছায় না।
আর প্রতিটি shim-এর সাধারণ মূল সীমা হলো এটা অস্থায়ী উপায়। Shim নির্দিষ্ট API-এর নির্দিষ্ট ব্যবহারের জন্য সেলাই করা মিথ্যা, আর OS-পক্ষ বাস্তবায়ন বদলালে ধারণা ভেঙে পড়ে। Microsoft-দেওয়া shim Windows Update দিয়ে Windows-এর অংশ হিসেবে রক্ষণাবেক্ষণ হয়,3 কিন্তু কাস্টম ডেটাবেস দিয়ে প্রয়োগ করা মিথ্যা সামলানো আপনার সংগঠনের কাজ। আয়ু-বৃদ্ধির খরচ হিসেবে প্রতিটি ফিচার আপডেটে «shim দিয়ে বাঁচিয়ে রাখা অ্যাপের তালিকা» যাচাই করার চালনা বাজেট করুন।
flowchart TB
accTitle: অস্থায়ী উপায় হিসেবে shim ও কে রক্ষণাবেক্ষণ করে
accDescr: Shim নির্দিষ্ট API ব্যবহারের জন্য সেলাই করা মিথ্যা আর OS-পক্ষ বাস্তবায়ন বদলালে ধারণা ভেঙে পড়ে; Microsoft shim Windows Update দিয়ে রাখা হয় কিন্তু কাস্টম-ডেটাবেস মিথ্যা সংগঠন সামলায় আর প্রতি ফিচার আপডেটে যাচাই আয়ু-বৃদ্ধির খরচ
shim["Shim = অস্থায়ী মিথ্যা"] --> break["OS বদল ভাঙে"]
ms["Microsoft shim"] --> wu["Windows Update দিয়ে"]
own["কাস্টম-ডেটাবেস মিথ্যা"] --> self["সংগঠন সামলায়"]
self --> cost["প্রতি আপডেটে যাচাই আয়ু-বৃদ্ধির খরচ"]
চিত্র 14: Shim মিথ্যা রক্ষণাবেক্ষণের দায়িত্ব Microsoft-দেওয়া সেট ও আপনার সংগঠনের কাস্টম সেটের মধ্যে ভাগ।
8. RunAsInvoker-এর ব্যবহারিক মূল্য — শুধু উন্নয়ন অনুরোধ শান্ত করা
Shim-এর মধ্যে দৈনন্দিন IT কাজে সবচেয়ে বেশি আসে RunAsInvoker।
কিছু পুরনো ব্যবসায়িক অ্যাপ ম্যানিফেস্টে requireAdministrator ঘোষণা করে, বা EXE নাম বা বিষয়বস্তু থেকে ইনস্টলার ভুল শনাক্ত হয়, আর প্রতি শুরুতে UAC উন্নয়ন চায়। তবু অনেকগুলো XP-যুগের জড়তায় শুধু অ্যাডমিনিস্ট্রেটর চায় আর সত্যি অ্যাডমিনিস্ট্রেটর অনুমতি ব্যবহার করে না। RunAsInvoker shim প্রয়োগ করলে ইনস্টলার শনাক্তকরণ ও ম্যানিফেস্ট দুটোই ওভাররাইট হয়, আর অ্যাপ প্যারেন্ট প্রক্রিয়া থেকে উত্তরাধিকার টোকেন (= স্ট্যান্ডার্ড-ইউজার অনুমতি) দিয়ে শুরু হয়।9
flowchart TB
accTitle: RunAsInvoker উন্নয়ন অনুরোধ কীভাবে চেপে রাখে
accDescr: ম্যানিফেস্টে requireAdministrator ঘোষণা বা ইনস্টলার ভুল শনাক্তকরণ শুরুতে UAC উন্নয়ন অনুরোধ জন্মায় কিন্তু RunAsInvoker প্রয়োগ করলে দুটোই ওভাররাইট হয় আর অ্যাপ প্যারেন্ট টোকেন দিয়ে শুরু হয়
manifest["requireAdministrator ঘোষণা"] --> shim{"RunAsInvoker প্রয়োগ?"}
detect["ইনস্টলার ভুল শনাক্ত"] --> shim
shim -->|না| uac["প্রতি শুরুতে UAC উন্নয়ন অনুরোধ"]
shim -->|হ্যাঁ| token["প্যারেন্ট টোকেন দিয়ে শুরু"]
token -.-> limit["সত্যি অ্যাডমিনিস্ট্রেটর লাগে এমন কাজ অ্যাপের ভেতর ব্যর্থ"]
চিত্র 15: RunAsInvoker শুধু উন্নয়ন অনুরোধের কারণ ওভাররাইট করে; অনুমতি বাড়ে না।
Compatibility Administrator-এ .sdb না বানিয়েও __COMPAT_LAYER এনভায়রনমেন্ট ভেরিয়েবল দিয়ে একই স্তর সাময়িক প্রয়োগ করতে পারেন।
:: Apply RunAsInvoker to child processes started from this command prompt
set __COMPAT_LAYER=RunAsInvoker
start "" "C:\LegacyApp\Gyomu.exe"
# In PowerShell
$env:__COMPAT_LAYER = 'RunAsInvoker'
Start-Process 'C:\LegacyApp\Gyomu.exe'
সেই দুই লাইনকে ব্যাচ ফাইল বানিয়ে শর্টকাট হিসেবে ভাগ করলে স্ট্যান্ডার্ড ইউজারকে স্থানীয় অ্যাডমিনিস্ট্রেটর অনুমতি দেওয়া এড়ানো যায়, আর IT প্রতিবার UAC পাসওয়ার্ডের জন্য ডাকা হয় না। এটা সামঞ্জস্য কৌশল যা প্রতিরক্ষা শক্ত করে, ন্যূনতম বিশেষাধিকারের সঙ্গে মিলে।
flowchart TB
accTitle: RunAsInvoker ব্যাচ ভাগ করার প্রভাব
accDescr: RunAsInvoker সেট করা দুই-লাইন ব্যাচ শর্টকাট হিসেবে ভাগ করলে স্ট্যান্ডার্ড ইউজারকে অ্যাডমিনিস্ট্রেটর অনুমতি দেওয়া এড়ানো যায় IT UAC পাসওয়ার্ডের জন্য ডাকা হয় না আর চালনা ন্যূনতম বিশেষাধিকার মেনে চলে
bat["দুই-লাইন ব্যাচ ভাগ করুন"] --> noadmin["অ্যাডমিনিস্ট্রেটর অনুমতি দেওয়া এড়ানো যায়"]
bat --> nocall["IT UAC-এর জন্য ডাকা হয় না"]
noadmin --> lp["ন্যূনতম বিশেষাধিকার মেনে চালনা"]
nocall --> lp
চিত্র 16: একা ব্যাচ ভাগ করা অ্যাডমিনিস্ট্রেটর অনুমতি দেওয়া ও UAC-এর জন্য ডাকা দুটোই কমাতে পারে।
সতর্কতাও, স্পষ্ট।
- অনুমতি বাড়ে না। সত্যি অ্যাডমিনিস্ট্রেটর অনুমতি লাগে এমন কাজ (HKLM লেখা, Program Files-এর নিচে আপডেট ইত্যাদি) অ্যাপের ভেতর ত্রুটি দেবে, বা শর্ত মিললে UAC ভার্চুয়ালাইজেশন VirtualStore-এ সরাবে।10 সেটিং সেভ হঠাৎ «থেমে গেছে» মনে হলে ভার্চুয়ালাইজেশন সন্দেহ করুন।
- এনভায়রনমেন্ট-ভেরিয়েবল পদ্ধতি শুধু সন্তান প্রক্রিয়ায় প্রযোজ্য। স্থায়ী প্রয়োগের জন্য Layers কীতে সরাসরি সেটিং (RUNASINVOKER-এর ট্যাবে আইটেম নেই) বা .sdb দিয়ে বিতরণ নির্ভরযোগ্য।
- লেখার গন্তব্য সারানো আসল পথ। অ্যাপ বদলাতে পারলে সেটিং ফাইল
%APPDATA%-এর নিচে নিয়ে যান আর ম্যানিফেস্টেasInvokerঘোষণা করুন — সেটাই সঠিক আকৃতি।9
flowchart TB
accTitle: RunAsInvoker-এর সাময়িক ও স্থায়ী প্রয়োগ
accDescr: COMPAT_LAYER এনভায়রনমেন্ট ভেরিয়েবল দিয়ে প্রয়োগ শুধু সেখান থেকে শুরু সন্তান প্রক্রিয়ায় হয়; স্থায়ী প্রয়োগে Layers কীতে সরাসরি সেটিং বা .sdb বিতরণ ব্যবহার করুন
env["এনভায়রনমেন্ট ভেরিয়েবল দিয়ে সেট"] --> child["শুধু সন্তান প্রক্রিয়ায় প্রযোজ্য"]
child -.-> tmp["সাময়িক প্রয়োগ"]
layers["Layers কীতে সরাসরি সেট"] --> always["স্থায়ী প্রয়োগ"]
sdb["sdb দিয়ে বিতরণ"] --> always
চিত্র 17: এনভায়রনমেন্ট-ভেরিয়েবল পদ্ধতি সন্তান প্রক্রিয়ায় সীমিত সাময়িক প্রয়োগ; স্থায়ী Layers কী বা .sdb দিয়ে হয়।
9. আয়ু-বৃদ্ধি ও মাইগ্রেশনের মধ্যে সিদ্ধান্ত — shim-এর নিচে চলার পর কী ভাববেন
Shim-এর নিচে চলার মুহূর্ত স্বস্তি, কিন্তু সেখানেই ভাবা থামানো গুরুত্বপূর্ণ নয়। Shim-এর নিচে চলা শুধু মানে Windows যে পাত্র তৈরি করেছিল তার সাথে কাকতালীয় মিল। সিদ্ধান্তের অক্ষ, টেবিলে।
| সিদ্ধান্ত অক্ষ | আয়ু-বৃদ্ধি (shim)-এর দিকে ঝোঁক শর্ত | মাইগ্রেশন / আবার-লেখার দিকে ঝোঁক শর্ত |
|---|---|---|
| অবশিষ্ট ব্যবহারকাল | ১–২ বছরে ব্যবসার সাথে অবসরের পরিকল্পনা | ৫ বছর বা তার বেশি চালানোর ধারণা |
| সোর্স কোড | নেই (ভেন্ডর চলে গেছে, বা হারিয়েছে) | আছে, বা সম্পদ ফেরানো যায় |
| নির্ভরতার গভীরতা | শুধু user-mode API-সামঞ্জস্য সমস্যা | ড্রাইভার, ১৬-বিট বা নিবেদিত হার্ডওয়্যারে নির্ভর |
| বিকল্প | প্যাকেজড পণ্য বা নতুন সংস্করণ নেই | গন্তব্য পণ্য ও প্রযুক্তি স্পষ্ট |
| ব্যর্থ হলে প্রভাব | ব্যবসা ফলব্যাক পদ্ধতিতে চলতে পারে | মূল ব্যবসা সরাসরি আঘাত পায় |
| যাচাই ক্ষমতা | প্রতি ফিচার আপডেটে আচরণ নিশ্চিত করা যায় | যাচাই সম্পদ নেই, আর জমাট বাঁধার প্রবণতা |
আয়ু-বৃদ্ধির সিদ্ধান্ত নিলে নিচের তিনটি পয়েন্ট চালনায় সেট হিসেবে রাখুন।
- লিখুন। কোন EXE, কোন shim/স্তর, আর কেন। Layers-কী মান ও .sdb GUID লেজারে রাখুন। «কেউ জানে না কেন চলে» পরের মানুষের ওপর সবচেয়ে বড় ঋণ। এটা সেই সংরক্ষণ মানসিকতা যা «When You Inherit a System With No Source Code and No Documentation»-এ আছে।
- যাচাই করুন। Windows ফিচার আপডেটের যাচাই আইটেমে shim দিয়ে বাঁচিয়ে রাখা অ্যাপের শুরু ও প্রধান চালনা রাখুন। OS-প্রতিস্থাপন পরিকল্পনার সাথেও বাঁধুন (Practical Options After Windows 10 End of Support)।
- সময়সীমা রাখুন। আয়ু-বৃদ্ধির শেষ ঠিক করুন — «পরের মূল-সিস্টেম রিফ্রেশ পর্যন্ত», «মার্চ ২০২৮ পর্যন্ত» — আর মাইগ্রেশন বিবেচনা সমান্তরাল চালান।
flowchart TB
accTitle: আয়ু-বৃদ্ধি সিদ্ধান্তের পর তিন-পয়েন্ট চালনা সেট
accDescr: লেজারে লিখুন কোন shim চালায় প্রতি ফিচার আপডেটে shim দিয়ে বাঁচিয়ে রাখা অ্যাপের আচরণ যাচাই করুন আয়ু-বৃদ্ধির শেষের সময়সীমা রাখুন আর মাইগ্রেশন বিবেচনা সমান্তরাল চালান
decide["আয়ু-বৃদ্ধির সিদ্ধান্ত"] --> rec["লিখুন: কোন shim চালায় লেজারে"]
rec --> verify["যাচাই: প্রতি ফিচার আপডেটে আচরণ নিশ্চিত"]
verify --> deadline["সময়সীমা: আয়ু-বৃদ্ধির শেষ ঠিক করুন"]
deadline --> mig["মাইগ্রেশন বিবেচনা সমান্তরাল চালান"]
চিত্র 18: আয়ু-বৃদ্ধি লেখা, যাচাই ও সময়সীমার তিন-পয়েন্ট সেট হিসেবে চালিত হয়, মাইগ্রেশন বিবেচনা সমান্তরালসহ।
মাইগ্রেশন পক্ষে স্ট্যান্ডার্ড বিকল্প অ্যাপের প্রযুক্তিতে বদলায়। VB6-এর জন্য পূর্ণ আবার-লেখা, স্বয়ংক্রিয় রূপান্তর ও ধাপে ধাপে মাইগ্রেশনের ত্রিপথ বাছাই «How Long Will VB6 Apps Keep Running?»-এ সাজানো; ActiveX/OCX নির্ভরতায় রাখুন / মুড়ুন / বদলান সিদ্ধান্ত টেবিল «How to Handle ActiveX / OCX Today»-এ। Shim-এর সুস্থ স্থান সেই মাইগ্রেশন প্রকল্পের বিবেচনা ও প্রস্তুতির কাল নিরাপদে চলার জন্য সময় কেনা।
flowchart TB
accTitle: মাইগ্রেশন পক্ষের বিকল্প ও shim কোথায় বসে
accDescr: স্ট্যান্ডার্ড মাইগ্রেশন বিকল্প অ্যাপের প্রযুক্তিতে বদলায়; VB6-এর জন্য আবার-লেখা স্বয়ংক্রিয় রূপান্তর বা ধাপে ধাপে মাইগ্রেশন ActiveX নির্ভরতায় রাখুন মুড়ুন বা বদলান টেবিল আর shim মাইগ্রেশন প্রকল্পের বিবেচনা ও প্রস্তুতির জন্য সময় কেনার স্থানে রাখা হয়
tech{"অ্যাপের প্রযুক্তি কী?"} -->|VB6| vb["আবার-লেখা স্বয়ংক্রিয় রূপান্তর বা ধাপে ধাপে মাইগ্রেশন"]
tech -->|ActiveX নির্ভরতা| ax["রাখুন মুড়ুন বা বদলান"]
shim["Shim দিয়ে আয়ু-বৃদ্ধি"] -.->|বিবেচনা ও প্রস্তুতির জন্য সময় কেনে| tech
চিত্র 19: স্ট্যান্ডার্ড মাইগ্রেশন বিকল্প অ্যাপের প্রযুক্তিতে ঠিক হয়, আর shim সেই বিবেচনার জন্য সময় কেনার স্থানে রাখা হয়।
10. সারাংশ
- সামঞ্জস্য মোডের আসল পরিচয় shim। Compatibility ট্যাবের সেটিং AppCompatFlags\Layers কীতে লেখা হয় আর শুরুতে IAT আবার-লেখার API হুক হিসেবে প্রক্রিয়ায় ঢোকে।
- Shim «পুরনো অ্যাপ যে উত্তর আশা করে তা ফেরানো মিথ্যা»-এর সংগ্রহ। সংস্করণ নকল, পথ পুনর্ম্যাপিং, রেজিস্ট্রি নকল, অ্যাডমিনিস্ট্রেটর যাচাই নকল ইত্যাদির তৈরি shim দেওয়া আছে।
- Windows নিজেই ডিফল্টে অনেক shim ব্যবহার করে, আর PCA স্বয়ংক্রিয় প্রয়োগ করতে পারে। সামঞ্জস্য মোডে নির্ভর করা নিজেই অফিসিয়াল OS ব্যবস্থায় চড়া যুক্তিসঙ্গত বাছাই।
- শুধু user-mode ও কোনো নিরাপত্তা বাইপাস নেই এমন নীতিগত সীমা আছে, আর কার্নেল ড্রাইভার, ১৬-বিট অ্যাপ ও সরাসরি হার্ডওয়্যার অ্যাক্সেস বাঁচানো যায় না।
- সাংগঠনিক রোলআউট Compatibility Administrator (Windows ADK)-এ কাস্টম .sdb তৈরি করে sdbinst দিয়ে বিতরণ। ৩২-বিট/৬৪-বিট সংস্করণ বেছে নেওয়া, আসল ব্যবহারকারী অ্যাকাউন্টে পরীক্ষা, আর GUID দিয়ে আপডেট পরিচালনা ব্যবহারিক পয়েন্ট।
- «অ্যাডমিনিস্ট্রেটর চায় কিন্তু সত্যি দরকার নেই» অ্যাপ
__COMPAT_LAYER=RunAsInvokerদিয়ে স্ট্যান্ডার্ড অনুমতিতে নামানো যায়। এটা প্রতিরক্ষা কৌশল যা উন্নয়ন অনুরোধ শান্ত করে অনুমতি দেওয়ার বদলে। - Shim-এর নিচে চলা আয়ু-বৃদ্ধি, সমাধান নয়। কী চালায় লেখা, প্রতি ফিচার আপডেটে যাচাই, আর সময়সীমা যাতে মাইগ্রেশন সমান্তরাল চলে — সেই তিন-পয়েন্ট সেট «সামঞ্জস্য মোডে নির্ভর» সিদ্ধান্তে অন্তর্ভুক্ত।
পরেরবার পুরনো অ্যাপ সামঞ্জস্য মোড চেকবক্সের পর চলতে শুরু করলে আবার জিজ্ঞেস করুন। «কোন মিথ্যার জোরে এই অ্যাপ চলছে? সেই মিথ্যা কতদিন কাজ করবে?» উত্তর দিতে পারলে আয়ু-বৃদ্ধি সম্মানজনক কৌশল।
সংশ্লিষ্ট নিবন্ধ
- Registry 32-bit/64-bit Redirection and Virtualization Pitfalls — Wow6432Node and the “The Value I Wrote Isn’t There” Problem
- How Long Will VB6 Apps Keep Running? — Runtime Support Status and a Practical Path to .NET Migration
- How to Handle ActiveX / OCX Today - A Keep / Wrap / Replace Decision Table
- Practical Options After Windows 10 End of Support — A Decision Table for ESU, LTSC, and Replacement
- When You Inherit a System With No Source Code and No Documentation — A Practical Playbook for Keeping It Running
- আজকের Windows শেল ইন্টিগ্রেশন ── কনটেক্সট মেনু, ফাইল অ্যাসোসিয়েশন, আর Windows 11-এ কী বদলেছে
সংশ্লিষ্ট পরামর্শ ক্ষেত্র
KomuraSoft LLC সোর্স কোডহীন পুরনো ব্যবসায়িক অ্যাপ কীভাবে আচরণ করে তার তদন্ত ও তাদের আয়ু-বৃদ্ধি ডিজাইন (shim ও সামঞ্জস্য মোড বাছাই, কাস্টম .sdb তৈরি ও রোল আউট), Windows 11 মাইগ্রেশনের জন্য বিদ্যমান অ্যাপের সামঞ্জস্য যাচাই, আর আয়ু-বৃদ্ধির সমান্তরাল আবার-লেখা বা মাইগ্রেশন পরিকল্পনা সামলায়। «সামঞ্জস্য মোডে চলতে শুরু করেছে, কিন্তু এভাবে রেখে দেওয়া কি ঠিক?» ধাপ থেকে পরামর্শ ঠিক আছে।
- বিদ্যমান সম্পদের পুনর্ব্যবহার ও মাইগ্রেশন
- Windows অ্যাপ ডেভেলপমেন্ট
- প্রযুক্তিগত পরামর্শ ও ডিজাইন রিভিউ
- যোগাযোগ করুন
তথ্যসূত্র
-
Microsoft Learn, Application Compatibility Database. সামঞ্জস্য অবকাঠামো সমস্যা ও প্রতিকার .sdb-ফরম্যাট ডেটাবেসে পরিচালনা করে, এক্সিকিউটেবল বৈশিষ্ট্যে মিলানো, Apphelp (বার্তা দেখানো) ও Appfix (shim দিয়ে API হুক), আর কয়েকটি shim ও ফ্ল্যাগ বাঁধা সামঞ্জস্য স্তর (মোড)। ↩ ↩2 ↩3
-
Microsoft Learn, DXGI overview. অ্যাপ-সামঞ্জস্য সেটিং রেজিস্ট্রি কী HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers-এ সংরক্ষিত (DXGI সামঞ্জস্য সেটিং উদাহরণ হিসেবে)। ↩ ↩2
-
Microsoft Learn, Understanding and Using Compatibility Fixes. সামঞ্জস্য ফিক্স (shim) IAT (import address table) আবার লিখে API কল সরায়, গতিশীল লিংকিং GetProcAddress হুক করে সামলানো হয়, shim অ্যাপের মতোই নিরাপত্তা সীমাবদ্ধতার অধীন ও OS নিরাপত্তা ব্যবস্থা ঘেরতে পারে না, শুধু user-mode ও ড্রাইভার সমস্যা সারাতে পারে না, shim-এ সম্ভব ফিক্স কোড সারানোতেও সম্ভব, ভেন্ডর সাপোর্ট শেষ অ্যাপের মতো ব্যবহার পরিস্থিতি, আর Microsoft-দেওয়া সামঞ্জস্য ফিক্স Windows-এর অংশ হয়ে আসে ও Windows Update দিয়ে আপডেট হয়। ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8
-
Microsoft Learn, Compatibility Fixes for Windows 10, Windows 8, Windows 7, and Windows Vista. পরিচিত সামঞ্জস্য ফিক্সের তালিকা ও বর্ণনা যাতে CorrectFilePaths, VirtualRegistry, ForceAdminAccess, RunAsAdmin/RunAsHighest/RunAsInvoker, WRPMitigation, EmulateGetDiskFreeSpace, GlobalMemoryStatusLie, LoadLibraryRedirect ও VersionLie পরিবার অন্তর্ভুক্ত; Compatibility Administrator-এর ৩২-বিট/৬৪-বিট সংস্করণ বেছে নেওয়া; আর উন্নীত অবস্থায় পরীক্ষা মানে ভার্চুয়ালাইজেশন ও রিডাইরেকশন প্রত্যাশিত আচরণ করে না তাই আসল ব্যবহারকারী অ্যাকাউন্টে যাচাই করুন। ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, Program Compatibility Assistant scenarios for Windows 8. PCA অ্যাপ চালনা দেখে, পরিচিত সামঞ্জস্য সমস্যার চিহ্ন শনাক্ত করে, আর সুপারিশকৃত ফিক্স প্রয়োগের প্রস্তাব দেয় বা স্বয়ংক্রিয় প্রয়োগ করে (PINDLL, DISABLEUSERCALLBACKEXCEPTION, VIRTUALIZEDELETE, WRPMITIGATION ইত্যাদি), আর Compatibility ট্যাব ও Program Compatibility Troubleshooter থেকে ফিক্স প্রয়োগ। ↩ ↩2
-
Microsoft Learn, GetVersionExW function. Windows 8.1 থেকে GetVersionEx-এর মান ম্যানিফেস্টে নির্ভর, Windows 8.1/10-এর জন্য ম্যানিফেস্ট না করা অ্যাপকে Windows 8 সংস্করণ মান (6.2) দেওয়া হয়, আর সামঞ্জস্য মোড চালু থাকলে নির্বাচিত OS-এর সংস্করণ রিপোর্ট হয়। ↩ ↩2 ↩3
-
Microsoft Learn, Targeting your application for Windows. অ্যাপ ম্যানিফেস্টের compatibility অংশে supportedOS উপাদান দিয়ে সমর্থিত-OS GUID কীভাবে ঘোষণা করবেন, ঘোষণা না থাকলে আচরণ, আর trustInfo না রাখা ৩২-বিট x86 ইন্টারঅ্যাকটিভ অ্যাপ UAC ফাইল ভার্চুয়ালাইজেশনের (VirtualStore-এ লেখা সরানো) অধীন। ↩ ↩2
-
Microsoft Learn, Running 32-bit Applications. WOW64 এমুলেশন স্তর যা ৬৪-বিট Windows-এ ৩২-বিট অ্যাপ চালায় ও ফাইল তথা রেজিস্ট্রি সংঘর্ষ আলাদা করে, আর ৬৪-বিট Windows ১৬-বিট অ্যাপ চালানো সমর্থন করে না, হ্যান্ডেলের বৈধ বিট সংখ্যার কারণে শুরু ERROR_BAD_EXE_FORMAT-এ ব্যর্থ। ↩ ↩2
-
Microsoft Learn, Using the RunAsInvoker Fix. RunAsInvoker সামঞ্জস্য ফিক্স অ্যাপকে প্যারেন্ট প্রক্রিয়া থেকে উত্তরাধিকার টোকেন দিয়ে শুরু করে, ইনস্টলার শনাক্তকরণ ও ম্যানিফেস্ট প্রক্রিয়াকরণ দুটোই ওভাররাইট করে, API না কেটে লোডার ফ্ল্যাগ হিসেবে প্রয়োগ হয়, আর কোড সারাতে পারলে সঠিক ফিক্স ম্যানিফেস্টে asInvoker ঘোষণা। ↩ ↩2 ↩3
-
Microsoft Learn, Registry Virtualization. রেজিস্ট্রি ভার্চুয়ালাইজেশন সামঞ্জস্য প্রযুক্তি যা HKLM\Software-এ বৈশ্বিক লেখা স্বচ্ছভাবে প্রতি-ব্যবহারকারী VirtualStore-এ সরায়, শুধু ৩২-বিট ইন্টারঅ্যাকটিভ প্রক্রিয়া পরিসরে ও ম্যানিফেস্টে requestedExecutionLevel নির্দিষ্ট প্রক্রিয়া এবং ৬৪-বিট প্রক্রিয়ার জন্য অক্ষম, আর ভবিষ্যৎ Windows থেকে সরানোর ইরাদা অস্থায়ী প্রযুক্তি হিসেবে রাখা। ↩ ↩2
-
Microsoft Learn, High DPI Desktop Application Development on Windows. DPI-অজ্ঞাত অ্যাপকে স্থির ৯৬ DPI-তে আঁকা ধরা হয় আর উচ্চ-DPI ডিসপ্লেতে Windows বিটম্যাপ টানায় তাই ঝাপসা দেখায়, আর DPI-সচেতনতা মোড (Unaware/System/Per-Monitor)-এর পার্থক্য। ↩ ↩2
-
Microsoft Learn, Download and install the Windows ADK. Windows ADK-এ Compatibility Administrator ও Standard User Analyzer অন্তর্ভুক্ত, আর ADK সংস্করণ কীভাবে ভাববেন এবং কীভাবে ডাউনলোড ও ইনস্টল করবেন। ↩
-
Microsoft Learn, Compatibility Administrator User’s Guide. Compatibility Administrator সামঞ্জস্য ফিক্স, সামঞ্জস্য মোড ও AppHelp বার্তা প্রয়োগ এবং কাস্টম ডেটাবেস তৈরি দেয়, আর ৩২-বিট ও ৬৪-বিট উভয় সংস্করণ ইনস্টল হয় এবং ৩২-বিট অ্যাপের জন্য ৩২-বিট সংস্করণ ও ৬৪-বিট অ্যাপের জন্য ৬৪-বিট সংস্করণই ব্যবহার করতে হয়। ↩
-
Microsoft Learn, Creating a Custom Compatibility Fix in Compatibility Administrator. সামঞ্জস্য ফিক্স (আগে shim বলা হত) ছোট কোড টুকরো যা API কল কাটে; কাস্টম ডেটাবেসে Application Fix তৈরির পদ্ধতি (অ্যাপ নাম, ভেন্ডর ও লক্ষ্য EXE নির্দিষ্ট, সামঞ্জস্য মোড বেছে নেওয়া, অতিরিক্ত shim বেছে নেওয়া, মিলানো শর্ত সেট); আর মিলানো তথ্য সরু করতে করতে অ্যাপ সঠিক শনাক্ত করার শর্ত রাখুন। ↩ ↩2
-
Microsoft Learn, Compatibility Fix Database Management Strategies and Deployment. কেন্দ্র-পরিচালিত ডেটাবেস কাস্টম সামঞ্জস্য ডেটাবেসের পরিচালনা কৌশল হিসেবে সুপারিশকৃত, সামঞ্জস্য ফিক্সে সংস্করণ যাচাই (মিলানো শর্ত) থাকা উচিত যাতে নতুন সংস্করণে প্রয়োগ না হয়, Sdbinst.exe দিয়ে স্থানীয় ইনস্টল (-q, -u, -g অপশন), একই ডেটাবেস GUID দিয়ে নতুন সংস্করণ ইনস্টল করলে পুরনো স্বয়ংক্রিয় আনইনস্টল, আর MSI বা স্ক্রিপ্ট দিয়ে বিতরণ পদ্ধতি। ↩ ↩2 ↩3
সম্পর্কিত নিবন্ধ
কাছাকাছি বিষয়ে গভীরে যেতে একই ট্যাগযুক্ত সাম্প্রতিক নিবন্ধ।
Win32 থ্রেড পুল API — CreateThreadpoolWork দিয়ে থ্রেড তৈরি না করে কনকারেন্সি
নেটিভ কোডে চারদিকে CreateThread ডাকছেন? এই নিবন্ধ Vista-তে নতুন করে সাজানো Win32 থ্রেড পুল API ব্যাখ্যা করে — work, timer, wait ও io চারট...
নেমড পাইপ ব্যবহারিকভাবে — ডিজাইন থেকে নিরাপত্তা পর্যন্ত Windows-এর মানক IPC
Windows-এর মানক আন্তঃপ্রক্রিয়া যোগাযোগ নেমড পাইপের ব্যবহারিক গাইড। প্রাথমিক উৎস থেকে এই নিবন্ধ বাইট ও মেসেজ মোডের পছন্দ, একাধিক ক্লায়েন...
ঘুম থেকে জাগলে ভাঙে যে অ্যাপ — Windows পাওয়ার ইভেন্টের কাজ ও যে ব্যবসায়িক অ্যাপ তা সহ্য করে
ল্যাপটপ খুললেন আর ব্যবসায়িক অ্যাপের সংযোগ মৃত — কারণ ঘুম ধরে না নেওয়া ডিজাইন। এই নিবন্ধ WM_POWERBROADCAST নোটিফিকেশন প্রবাহ, Modern Sta...
DllMain ও লোডার লক — DLL ইনিশিয়ালাইজেশনে "কিছুই করবেন না" বলা হয় তার আসল কারণ
DllMain থেকে LoadLibrary ডাকা বা অন্য থ্রেডের সাথে সিঙ্ক্রোনাইজ করা যায় না কেন। প্রাথমিক উৎস থেকে এই নিবন্ধ ব্যাখ্যা করে লোডার লক প্রতিট...
"Not Responding" আসলে কী — Windows কীভাবে অ্যাপ হ্যাং ধরে, আর যে ডিজাইন হ্যাং করে না
Windows-এর "Not Responding" এমন যন্ত্র যেখানে OS বিচার করে উইন্ডো ৫ সেকেন্ড মেসেজ তোলেনি আর তাকে ঘোস্ট উইন্ডো দিয়ে বদলায়। এই নিবন্ধ সেই...
সম্পর্কিত বিষয়
এই পৃষ্ঠাগুলো বিষয়টিকে সেবা ও সিদ্ধান্তের বৃহত্তর প্রেক্ষাপটে স্থাপন করে।
Windows-এর প্রযুক্তিগত বিষয়
Windows ডেভেলপমেন্ট, বাগ তদন্ত ও বিদ্যমান সম্পদ ব্যবহারের প্রবেশদ্বার।
এই বিষয়ের সাথে সম্পর্কিত সেবা
নিবন্ধটি নিচের সেবাগুলোর সাথে সরাসরি সম্পর্কিত।
Windows অ্যাপ ডেভেলপমেন্ট
ব্যবসায়িক অ্যাপ, ডিভাইস ইন্টিগ্রেশন ও যোগাযোগ টুল, চাহিদা থেকে ডেভেলপমেন্ট পর্যন্ত।
প্রায়শ জিজ্ঞাসিত প্রশ্ন
এই নিবন্ধের বিষয়ে পরামর্শে প্রায়ই আসা প্রশ্ন।
- সামঞ্জস্য মোড টিক করার পর অ্যাপ চলতে শুরু করলে সেভাবেই চালানো যায়?
- স্বল্পমেয়াদে ব্যবসা চালু রাখতে হ্যাঁ। সামঞ্জস্য মোড user-mode API হুক যাকে shim বলে, OS-এর দেওয়া অফিসিয়াল ব্যবস্থা। তবু shim অ্যাপ না সারিয়ে চালানোর অস্থায়ী উপায়, আর অন্য OS আপডেট ধারণা বদলে আবার ভাঙতে পারে। সামঞ্জস্য মোডে চলার তথ্য লেজারে লিখুন, আর সেই রেকর্ডকে অ্যাপ আবার লেখা বা ইচ্ছে করে আয়ু বাড়ানোর সিদ্ধান্তের অংশ ধরুন।
- সামঞ্জস্য মোডের চেকবক্স আসলে কী করে?
- প্রপার্টি ডায়ালগের Compatibility ট্যাবে সেটিং সেভ করলে Windows লক্ষ্য EXE-এর পথ ও "WINXPSP3" বা "HIGHDPIAWARE"-এর মতো মান HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers কীর নিচে লেখে। পরেরবার সেই EXE শুরু হলে Windows লোডার মান পড়ে সংশ্লিষ্ট সামঞ্জস্য স্তর (shim বান্ডেল) প্রক্রিয়ায় প্রয়োগ করে। Windows XP সামঞ্জস্য মোড, উদাহরণস্বরূপ, সংস্করণ-কোয়েরি API থেকে পুরনো মান ফিরিয়ে OS সংস্করণ নকল করে। OS নিজে বদলায় না; শুধু সেই প্রক্রিয়াকে ভান করা পুরনো Windows দেখানো হয়।
- ১৬-বিট যুগের অ্যাপ ৬৪-বিট Windows-এ সামঞ্জস্য মোডে চালানো যায়?
- না। ৬৪-বিট Windows ৩২-বিট অ্যাপ WOW64 দিয়ে চালায়, কিন্তু ১৬-বিট অ্যাপ চালানো সমর্থিত নয়, আর শুরুর চেষ্টা ERROR_BAD_EXE_FORMAT-এ ব্যর্থ হয়। সেটা স্থাপত্য সীমা যা shim ঘেরতে পারে না। পুরনো প্যাকেজ যার ইনস্টলার স্টাব ১৬-বিট একই কারণে ব্যর্থ হয়। সত্যি দরকার হলে সামঞ্জস্য মোডের বাইরে দেখুন — যেমন ৩২-বিট Windowsসহ ভার্চুয়াল মেশিন।
- «অ্যাডমিনিস্ট্রেটর হিসেবে না চালালে শুরু হবে না» এমন অ্যাপ স্ট্যান্ডার্ড ইউজার অ্যাকাউন্টের নিচে চালাতে পারি?
- RunAsInvoker চেষ্টা করার মতো। কমান্ড প্রম্পটে set __COMPAT_LAYER=RunAsInvoker চালিয়ে তারপর অ্যাপ শুরু করলে requireAdministrator ম্যানিফেস্ট বা ইনস্টলার শনাক্তকরণ থেকে উন্নয়ন অনুরোধ চাপা পড়ে, আর অ্যাপ কলারের মতোই (স্ট্যান্ডার্ড-ইউজার) অনুমতিতে শুরু হয়। যে অ্যাপ শুধু অ্যাডমিনিস্ট্রেটর অধিকার চায় আর সত্যি ব্যবহার করে না, একা এতেই দৈনন্দিন চালনা থেকে উন্নয়ন সরানো যায়। অনুমতি বাড়ে না, তাই সত্যি অ্যাডমিনিস্ট্রেটর অধিকার লাগে এমন কাজ অ্যাপের ভেতর ব্যর্থ হবে। আচরণ যাচাই করার পরেই গ্রহণ করুন।
- Compatibility Administrator কোথায় পাব?
- Windows ADK (Windows Assessment and Deployment Kit)-এ অন্তর্ভুক্ত। Microsoft সাইট থেকে ADK ডাউনলোড করুন এবং ইনস্টলের সময় Application Compatibility Tools ফিচার বেছে নিন। ৩২-বিট ও ৬৪-বিট উভয় সংস্করণ ইনস্টল হয়; ৩২-বিট অ্যাপের জন্য ৩২-বিট সংস্করণ ও ৬৪-বিট অ্যাপের জন্য ৬৪-বিট সংস্করণই ব্যবহার করতে হয়। আপনার তৈরি কাস্টম সামঞ্জস্য ডেটাবেস (.sdb) প্রতিটি PC-তে sdbinst কমান্ড চালিয়ে প্রয়োগ করুন।