ในบทความนี้เราจะแสดงวิธีปิด UAC แบบเลือกเฉพาะสำหรับแอปพลิเคชันบางตัวโดยไม่ปิดบริการ User Account Control ทั้งหมด พิจารณาหลายวิธีในการปิด UAC สำหรับแอปเดียวโดยใช้แฟล็กความเข้ากันได้ RunAsInvoker
User Account Control ขอให้ผู้ใช้ยืนยันการกระทำใดๆ ที่ต้องการสิทธิ์แอดมิน นี่เป็นกลไกที่ค่อนข้างมีประสิทธิภาพในการปกป้อง Windows จากภัยคุกคามหลายประเภท (ไวรัส โทรจัน หนอน รูทคิต เป็นต้น) ผู้ใช้บางคนรู้สึกรำคาญกับหน้าต่าง UAC ที่โผล่ขึ้นมา และเลือกที่จะปิดคุณสมบัติความปลอดภัยนี้ แม้ Microsoft และผู้เชี่ยวชาญด้านความปลอดภัยจะแนะนำอย่างยิ่งให้ไม่ทำเช่นนั้น
แฟล็ก RunAsInvoker ช่วยให้คุณรันแอปพลิเคชันด้วยเครื่องหมายที่สืบทอดมาจากกระบวนการผู้ปกครอง (parent process) สิ่งนี้จะยกเลิกการประมวลผล Manifest ของแอปพลิเคชัน และการค้นพบกระบวนการติดตั้ง (installer detection) พารามิเตอร์นี้ไม่ได้ให้สิทธิ์แอดมิน แต่เพียงข้ามการแจ้งเตือน UAC เท่านั้น
เป็นตัวอย่าง เราจะปิดการแจ้งเตือน UAC สำหรับ Registry Editor (regedit.exe) 儘管บัญชีของฉันมีสิทธิ์ Local Administrator เมื่อรันยูทิลิตี้ คำขอ UAC ยังคงปรากฏเพื่อยืนยันการเปิดใช้งาน

หากโปรแกรมต้องการสิทธิ์แอดมินเพราะเปลี่ยนแปลงการตั้งค่าหรือไฟล์ระบบ สิทธิ์ของผู้ใช้ในแอปพลิเคชันจะไม่ได้รับการยกระดับหลังจากปิด UAC โปรแกรมจะยังคงทำงานภายใต้สิทธิ์ของผู้ใช้ปัจจุบัน และหากคุณไม่มีสิทธิ์ทำการเปลี่ยนแปลงเหล่านั้น โปรแกรมจะไม่สามารถทำได้ มีแอปพลิเคชันจำนวนน้อยที่ทำงานได้เฉพาะในโหมด "Run as administrator" เท่านั้น ซึ่งจะไม่สนใจแฟล็กความเข้ากันได้ RunAsInvoker
เนื้อหา:
- ปิด UAC สำหรับโปรแกรมโดยใช้ Application Compatibility Toolkit
- เปิดใช้งานแฟล็ก RunAsInvoker ของแอปผ่าน Registry
- ไฟล์ Batch เพื่อรันแอปพลิเคชันในโหมด RunAsInvoker
ปิด UAC สำหรับโปรแกรมโดยใช้ Application Compatibility Toolkit
เราต้องติดตั้ง Application Compatibility Toolkit ซึ่งเป็นส่วนหนึ่งของ Windows ADK ดาวน์โหลดเวอร์ชันล่าสุดของ Windows ADK สำหรับ Windows 10 ได้ที่นี่
รันไฟล์ adksetup.exe และระหว่างการติดตั้ง (โปรแกรมต้องการการเข้าถึงอินเทอร์เน็ต) ให้เลือกเฉพาะรายการ Application Compatibility Tools
Microsoft Application Compatibility Tools คือชุดเครื่องมือฟรีสำหรับแก้ไขปัญหาความเข้ากันได้ของแอปเมื่อย้ายไป Windows เวอร์ชันใหม่

มีสองเวอร์ชันของ Application Compatibility Administrator ในระบบ — 32-bit และ 64-bit ให้รันเวอร์ชันของ Application Compatibility Administrator ตาม bitness ของแอปพลิเคชันที่คุณต้องการปิดคำขอ UAC

รัน Compatibility Administrator (32-bit) ด้วยสิทธิ์แอดมิน (!) ในโหนด Custom Databases คลิกขวา New Database และเลือก Create New -> Application Fix

ในหน้าต่างถัดไป ให้ใส่ชื่อแอปพลิเคชัน (regedit) ชื่อผู้จำหน่าย (Microsoft) และพาธไปยังไฟล์ Executable (C:\Windows\System32\regedit.exe)

ข้ามหน้าต่างถัดไป (Compatibility Mode) ของวิซาร์ดการตั้งค่าด้วยการกด Next ในหน้าต่าง Compatibility Fixes ให้ติ๊กตัวเลือก RunAsInvoker
คุณสามารถตรวจสอบได้ว่าแอปพลิเคชันสามารถรันโดยไม่มี UAC โดยการกดปุ่ม Test Run

ในกล่องโต้ตอบ Matching Information คุณสามารถระบุว่าพารามิเตอร์ใดของแอปพลิเคชันควรตรวจสอบ (เวอร์ชัน checksum ขนาด เป็นต้น) ผมเหลือตัวเลือก COMPANY_NAME, PRODUCT_NAME และ ORIGINAL_FILENAME ติ๊กไว้ เพื่อหลีกเลี่ยงการสร้างไฟล์แพตช์ความเข้ากันได้ใหม่หลังอัปเดต Windows 10 ครั้งต่อไป

เคล็ดลับ เพื่อป้องกันการปลอมแปลง Executable โดยแฮกเกอร์ คุณสามารถขอการตรวจสอบเพิ่มเติมเมื่อรันไฟล์ (เช่น การตรวจสอบ CHECKSUM, FILE_VERSION หรือ FILE_SIZE) ควรทราบว่าการตรวจสอบเพิ่มเติมจะทำให้การเริ่มต้นแอปช้าลง
คลิก Finish และระบุชื่อไฟล์ที่แพ็กเกจการแก้ไขความเข้ากันได้ต้องบันทึก เช่น regedit.sdb ไฟล์นี้จะมีคำแนะนำสำหรับการเริ่มต้นแอปพลิเคชันด้วยตัวเลือกความเข้ากันได้ที่ระบุ

ตอนนี้คุณเพียงแค่ต้องนำแพ็กเกจการแก้ไขความเข้ากันได้ไปใช้กับแอปพลิเคชันของเรา คุณสามารถทำได้จากคอนโซล Compatibility Administrator (เลือก Install ในเมนู) หรือจาก Command Prompt

ในการทำเช่นนั้น ให้เปิด Command Prompt ที่มีสิทธิ์สูงและรันคำสั่งต่อไปนี้:
sdbinst -q c:\ps\regedit.sdb
หากคุณทำถูกต้อง จะปรากฏข้อความว่าการติดตั้งแพ็กเกจสำเร็จ
Installation of regedit complete.

หลังจากติดตั้งแพ็กเกจแล้ว รายการที่เกี่ยวข้องจะปรากฏในรายการโปรแกรมที่ติดตั้งของ Windows (Programs and Features)

ลองรันแอปพลิเคชันในเซสชันผู้ใช้โดยไม่มีสิทธิ์ Local Administrator ตอนนี้มันควรเริ่มต้นโดยไม่มีคำขอ UAC
ตอนนี้ตรวจสอบสิทธิ์ของแอปพลิเคชันที่กำลังทำงาน ให้เปิด Task Manager ไปที่แท็บ Process เพิ่มคอลัมน์ "Elevated" ตรวจสอบให้แน่ใจว่ากระบวนการ regedit.exe เริ่มต้นจากผู้ใช้ในโหมด Unprivileged (Elevated = No)

ในกระบวนการ Registry Editor นี้ ผู้ใช้สามารถแก้ไขคีย์และพารามิเตอร์ Registry ของตัวเองได้เท่านั้น แต่ถ้าคุณลองแก้ไข/สร้างอะไรใน System HKLM จะเกิดข้อผิดพลาด: "You don't have the requisite permissions"

ภายหลังการแก้ไขความเข้ากันได้นี้สามารถกระจายไปยังคอมพิวเตอร์ผู้ใช้ทั้งหมดโดยใช้ Group Policies ดังนั้นคุณสามารถปิดการตรวจสอบ UAC สำหรับแอปพลิเคชันเฉพาะบนคอมพิวเตอร์หลายเครื่องในโดเมน Active Directory ได้
เพื่อลบการแก้ไขความเข้ากันได้ ให้รันคำสั่ง:
sdbinst –u c:\ps\regedit.sdb
เปิดใช้งานแฟล็ก RunAsInvoker ของแอปผ่าน Registry
คุณสามารถเปิดใช้งานแฟล็กความเข้ากันได้ RUNASINVOKER ใน Windows 10/8.1/7 ผ่าน Registry แฟล็กความเข้ากันได้ของแอปพลิเคชันสามารถตั้งค่าได้สำหรับผู้ใช้คนเดียวหรือผู้ใช้ทุกคนของคอมพิวเตอร์
ตัวอย่างเช่น สำหรับแอป regedit คุณต้องสร้างพารามิเตอร์ Registry ใหม่ (REG_SZ) ใน Registry key ต่อไปนี้ HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers:
- Value name: C:\windows\regedit.exe
- Value data: RunAsInvoker

หากคุณต้องการเปิดโหมดความเข้ากันได้ของแอปพลิเคชันสำหรับผู้ใช้ทุกคนในเครื่อง คุณต้องสร้างพารามิเตอร์นี้ใน Registry key อื่น:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
ในโดเมน คุณสามารถนำเข้า/ปรับใช้การตั้งค่า Registry นี้ให้กับผู้ใช้ผ่าน GPO ได้
ไฟล์ Batch เพื่อรันแอปพลิเคชันในโหมด RunAsInvoker
มีอีกวิธีหนึ่งในการรันโปรแกรมโดยไม่มีสิทธิ์แอดมินและข้าม UAC Prompt (ดูบทความ)
เพียงสร้างไฟล์ .bat ด้วยโค้ดต่อไปนี้:
Set ApplicationPath="C:\windows\regedit.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"

เมื่อรันไฟล์ bat นี้ภายใต้ผู้ใช้ทั่วไป แอปพลิเคชันที่ระบุจะเริ่มต้นโดยไม่มี UAC Prompt
ดังนั้น เราได้ดูวิธีปิด UAC สำหรับโปรแกรมเฉพาะโดยไม่ปิด User Account Control ทั้งหมด วิธีนี้จะช่วยให้คุณรันโปรแกรม Windows ภายใต้ Non-admin โดยไม่มี UAC Prompt และไม่ต้องใส่รหัสผ่านแอดมิน