บังคับให้โปรแกรมรัน * โดยไม่มีสิทธิ์ผู้ดูแลระบบหรือ UAC


122

มีวิธีใดบ้างที่ฉันสามารถบังคับให้โปรแกรมที่ปกติต้องใช้สิทธิ์ผู้ดูแลระบบ (ผ่าน UAC) เพื่อให้ทำงานได้โดยไม่ต้องใช้สิทธิ์ดังกล่าว (เช่น: ไม่มีพรอมต์ UAC และไม่มีการเข้าถึงทั่วทั้งระบบ )

เพิ่ม: โดยไม่ต้องแก้ไขตัวปฏิบัติการ


ทั้งๆที่มีคำตอบของเจมส์ฉันได้พบสองสามวิธีที่เกือบจะทำได้:

  1. โดยการปรับเปลี่ยนปฏิบัติการฉันสามารถลบtrustInfoรายการจากรายการ (หรือรายการทั้งหมดดังนั้นฉันสามารถใช้รายการภายนอก) ทำให้โปรแกรมเริ่มต้นโดยไม่มี UAC น่าเสียดายที่สิ่งนี้ปรับเปลี่ยนการปฏิบัติการได้ดังนั้นจึงออกหลังจากไม่นานเนื่องจากการทดสอบการตรวจสอบภายใน
  2. โดยใช้ Process Explorer ฉันสามารถเปิดใช้ในฐานะผู้ใช้ที่ จำกัด ได้ อย่างไรก็ตามสิ่งนี้ดูเหมือนว่าจะ จำกัด อย่างมีนัยสำคัญมากกว่าที่ฉันต้องการ (มันทำงานเหมือน Protected Mode IE และสามารถเข้าถึงได้น้อยกว่าสิ่งที่ผู้ใช้ยกระดับมาตรฐานของฉันไม่สามารถทำได้)

1
คุณระบุว่าไม่ได้แก้ไขไฟล์ปฏิบัติการ แต่การแก้ไขไฟล์. exe เป็นวิธีที่คุณพยายามทำใช่ไหม?
cutrightjm

3
@ekaj ฉันระบุเพียงว่าหลังจากที่ผมพบว่ามันจะไม่ทำงาน;)
แอนดรูรัสเซล

คุณอาจระบุโปรแกรมแม้ว่าคุณจะไม่ใช้อีกต่อไปแล้ว? นั่นอาจช่วยให้ผู้คนรู้ว่ากำลังพยายามเข้าถึงอะไรที่ต้องใช้สิทธิ์ผู้ดูแลระบบ
cutrightjm

@ekaj น่าเสียดายที่ไม่ อย่างไรก็ตามมันไม่เกี่ยวข้องโดยเฉพาะอย่างยิ่ง: UAC ถูกเรียกใช้โดยโปรแกรมที่ขอให้มีการยกระดับในระหว่างการสร้างกระบวนการ เมื่อกระบวนการเริ่มต้นแล้วจะไม่สามารถเปลี่ยนสถานะการยกระดับ - ไม่ว่าทรัพยากรที่ จำกัด จะพยายามเข้าถึง
แอนดรูรัสเซลล์

หากโปรแกรมไม่มีรายการและปฏิเสธที่จะทำงานโดยไม่มีสิทธิ์ผู้ดูแลระบบเป็นไปได้มากที่สุดเนื่องจากการตรวจหาโปรแกรมติดตั้ง UAC ฉันโพสต์คำถามนี้และ misha256 มีทางออกที่ดี ฉันทดสอบแล้วและฉันสามารถยืนยันได้ว่ามันใช้งานได้ superuser.com/questions/857616/ …ฉันได้ทำการวิจัยบางอย่างและฉันพบว่าไม่มีเหตุผลสำหรับการตรวจหาโปรแกรมติดตั้งอยู่ โปรดทราบว่าหากสิทธิ์ผู้ดูแลระบบเกิดจากรายการ trustinfo ในไฟล์ Manifest จะไม่สามารถใช้งานได้
user1258361

คำตอบ:


74
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker]
@="Run without privilege elevation"

[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command]
@="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""

บันทึกข้อความนี้<name_of_file>.regและเพิ่มลงใน Windows Registry (ดับเบิลคลิกที่มันควรทำเคล็ดลับ)

หลังจากนั้นให้คลิกขวาที่แอปที่คุณต้องการเรียกใช้โดยไม่มีสิทธิ์ระดับผู้ดูแลและเลือก "เรียกใช้โดยไม่มีสิทธิ์ยกระดับสิทธิ์"

ในบางกรณี - จำนวนเล็กน้อย 0.1% ของโปรแกรมอาจถาม UAC prompt สองครั้ง


1
ฉันเคยใช้ Application Compatibility Toolkit shim แต่นั่นก็เป็นงานจำนวนมากสำหรับแต่ละไฟล์ที่เรียกใช้งานได้และทิ้งขยะในรีจิสตรีสำหรับแต่ละไฟล์เช่นกัน วิธีนี้ใช้ได้ดีและฉันชอบมากขึ้น
Ben Voigt

2
ยอมรับสิ่งนี้เนื่องจากเป็นวิธีที่ตรงไปตรงมาที่สุดและฉัน ( ในที่สุด! ) สามารถตรวจสอบได้ นอกจากนี้ยังมีคุณสมบัติที่ดีมากของการใช้งานเล็กน้อยเป็นบรรทัดคำสั่งครั้งเดียวออก (ลบด้านนอก"แล้วเปลี่ยน\"เป็น")
Andrew Russell

1
ฉันมีปัญหาเช่นเดียวกับ @Derek แอปพลิเคชันดูเหมือนจะคอยถาม UAC ซ้ำ ๆ อยู่ตลอดเวลาฉันไม่ไว้ใจกับการเข้าถึงระบบอย่างกว้าง ๆ แต่ฉันต้องการฟังก์ชั่นการใช้งาน ..
Gizmo

1
คุณสามารถเพิ่มสิ่งนี้ลงในรีจิสทรีสำหรับผู้ใช้ที่ลงชื่อเข้าใช้ปัจจุบันเท่านั้นโดยเปลี่ยนคีย์เป็น: HKEY_CURRENT_USER \ Software \ Classes * \ shell \ forcerunasinvoker และ HKEY_CURRENT_USER \ Software \ Classes * \ shell \ forcerunasinvoker \ command
GodEater

1
@ jpmc26 ฉันคิดว่า/minเป็นข้อผิดพลาด วิธีการแก้ปัญหาทำงานเหมือนเดิมโดยไม่ได้ Vom จะต้องผสมกันcmdและมีstartสวิตช์ ดูเหมือนว่าcmd.exeจะไม่บ่นเรื่องสวิตช์ผิด cmd /whateverตัวอย่างเช่นลอง
cdlvcdlv

53

บันทึกไปที่nonadmin.bat:

cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

ตอนนี้คุณสามารถลากและวางโปรแกรมเพื่อเรียกใช้โดยไม่มีผู้ดูแลระบบ

สิ่งนี้ไม่ต้องการสิทธิ์ผู้ดูแลระบบเนื่องจากการเปลี่ยนรีจิสตรีคีย์ นอกจากนี้คุณจะไม่เกะกะเมนูบริบท

ตามคำตอบของ Vom


ปรับปรุง:ตอนนี้ควรทำงานกับโปรแกรมที่มีช่องว่างในชื่อเช่นกัน


ฉันลองในบางโปรแกรมที่ต้องการเข้าถึงไดรฟ์ของฉันและตรวจไม่พบหรือไม่ทำงานในตอนแรก: / ( ตัวอย่างเช่นrufus rufus.akeo.ie )
keinabel

7
@keinabel นั่นอาจเป็นเพราะพวกเขาต้องการให้ผู้ดูแลระบบทำงานจริง สคริปต์นี้มีไว้สำหรับโปรแกรมที่ต้องการสิทธิ์ของผู้ดูแลระบบโดยไม่ต้องทำสิ่งที่ต้องการ การเข้าถึงไดรฟ์แบบ Raw เป็นเรื่องปกติของผู้ดูแลระบบ
Hjulle

2
ค่อนข้างเรียบร้อย! สามารถติดตั้ง XAMPP โดยใช้วิธีนี้
Krishnaraj

ดูเหมือนว่านี่จะไม่ทำงานสำหรับฉันสำหรับไฟล์ปฏิบัติการใด ๆ ในไดเรกทอรี "C: \ Program Files \ ... " Windows cannot find 'C:\Program'. Make sure you typed the name correctly, and then try againฉันได้รับ ฉันลองคำสั่งนี้ด้วยตนเองหลายครั้งด้วยการเปลี่ยนแปลงเล็กน้อยและไม่มีโชค ความคิดใด ๆ
Jake Smith

1
ฉันมีปัญหาเดียวกันกับที่ตั้งของไฟล์ที่อยู่ในโฟลเดอร์ที่มีช่องว่าง แก้ไขได้โดยลบเครื่องหมายคำพูดคู่: cmd / min / C "set __COMPAT_LAYER = RUNASINVOKER && เริ่ม" "% 1"
ragnar

35

ฉันหวังว่าฉันจะไม่สายเกินไปที่จะเลี้ยง แต่ฉันกำลังมองหาคำถามที่คล้ายกันและไม่เห็นคำตอบที่นี่ฉันพบว่าRunAsคำสั่งbuiltin ของ Windows เมื่อทำงานในฐานะผู้ดูแลระบบสามารถทำได้ด้วย/trustlevelสวิตช์

RUNAS /trustlevel:<TrustLevel> program

/showtrustlevels  displays the trust levels that can be used
                  as arguments to /trustlevel.
/trustlevel       <Level> should be one of levels enumerated
                  in /showtrustlevels.

มันใช้งานได้ในกรณีของฉัน กระแทกแดกดันเริ่มต้นโปรแกรมอย่างชัดเจนโดยไม่ต้องยกระดับต้องพร้อมท์คำสั่ง ไปคิด :) ฉันหวังว่ามันจะช่วยคุณ


ฉันสามารถยืนยันได้ว่าไม่ได้ผล ฉันเพิ่งทดสอบและพบข้อผิดพลาด: "ข้อผิดพลาด RUNAS: ไม่สามารถเรียกใช้ - (ชื่อโปรแกรมที่นี่) การดำเนินการที่ร้องขอต้องใช้ระดับความสูง"
user1258361

9
@ user1258361 คุณต้องเรียกใช้คำสั่งนี้จากพรอมต์ยกระดับเช่นเดียวกับที่ฉันเขียนเป็นตัวหนา ...
Mxx

ดูเหมือนว่าจะไม่ต้องการพรอมต์ที่ยกระดับใน Windows 7 ...
SamB

4
ทดสอบด้วยพรอมต์ที่เพิ่มขึ้นใช้บรรทัดคำสั่ง runas / trustlevel: 0x20000 (โปรแกรม) โปรแกรมทำงานเป็นผู้ดูแลระบบอยู่ดี สำหรับการอ้างอิง 0x20000 เป็นผู้ใช้ขั้นพื้นฐาน
user1258361

2
ต้องมีพรอมต์คำสั่งที่ได้รับการยกระดับ ... แน่นอน มิฉะนั้นคุณอยู่แล้วโดยไม่ต้องสิทธิผู้ดูแลระบบและกระบวนการใด ๆ คุณจะเริ่มต้นยังจะขาดพวกเขา
ปลอมตัว Twisty

16

หากคุณมีแอปพลิเคชันเฉพาะที่คุณต้องการเรียกใช้โดยไม่มี UAC คุณสามารถกำหนดเป้าหมายด้วย Registry (เพิ่มข้อความไปยังไฟล์ REG และนำเข้าลงใน Registry):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\example\\application.exe"="RunAsInvoker"

ซึ่งแตกต่างจากคำตอบนี้โซลูชันนี้ไม่จำเป็นต้องมีการคลิกหรือเปลี่ยนการโต้ตอบกับผู้ใช้

ไมโครซอฟท์เรียกกระบวนการนี้เพิ่ม"ความเข้ากันชิม"RunAsInvoker


คำตอบของคำถามที่แตกต่าง แต่เกี่ยวข้องก็เป็นแรงบันดาลใจให้กับคำตอบนี้
palswim

1
ขอบคุณมาก! นี่เป็นสิ่งเดียวที่ใช้ได้ผลสำหรับฉัน! ฉันมีแอปพลิเคชั่นซึ่งถูกเรียกจากเมนูบริบทของ windows และมันก็ขึ้นมาในฐานะผู้ดูแลระบบเสมอแม้ว่ามันจะถูกเรียกอย่างถูกต้องจากที่อื่นก็ตาม หลังจากการแก้ไขนี้แอปพลิเคชันเริ่มต้นถูกเรียกอย่างถูกต้อง
ผู้ใช้

3

ฉันแก้ปัญหานี้วันนี้ด้วยชุดเครื่องมือปรับแต่งแอปพลิเคชัน MS

ผมทำตามคำแนะนำในบทความเทคโนโลยีสาธารณรัฐ

โดยทั่วไป:

1) คุณจะได้รับเครื่องมือจาก MS ที่นี่

2) คลิกแก้ไข

3) เลือกตัวเลือกRunAsInvoker

4) คลิกขวาที่โปรแกรมฟิกซ์และเลือกติดตั้ง


คำตอบของคุณตรงข้ามกับผลที่ต้องการ คำถามเดิมคือวิธีการบังคับให้แอปพลิเคชันที่ขอสิทธิ์ยกระดับให้ทำงานโดยไม่ต้องยกระดับ คำตอบของคุณยังคงใช้ UAC แต่เพียงปิดใช้งานพรอมต์นั้น นั่นเป็นคำตอบที่ผิดสำหรับคำถามนี้
Mxx

@mxx ไม่จริง หากผู้ใช้ปัจจุบันถูก จำกัด (หรือคุณเปิดใช้งาน UAC) กระบวนการจะเริ่มทำงานพร้อมสิทธิ์ จำกัด ทั้งหมด
LogicDaemon

1
@LogicDaemon ถ้าคุณจริงอ่านบทความคุณจะเห็นว่ามันอธิบายว่าถ้าคุณทำตามขั้นตอนเหล่านั้นที่คุณจะใช้แอปเป็นผู้ดูแลระบบได้โดยไม่ต้อง UAC พรอมต์ ตรงข้ามกับสิ่งที่ OP ขอ
Mxx

@mxx ไม่ อ่านต่อTechNetสิ่ง RunAsInvoker ทำจริง นี่คือสิ่งที่ขอให้เป็นหัวข้อหลักแม้ว่าจะใช้ได้เฉพาะกับแอปรุ่นเก่าเท่านั้น
LogicDaemon

ตราบใดที่ Explorer ไม่ใช่ผู้ดูแลระบบ cmd หรือกระบวนการมาตรฐานอื่น ๆ ที่เป็นผู้ปกครอง RunAsInvoker จะทำงานด้วยสิทธิ์ที่ จำกัด เหมือนกัน (Explorer จะถูก จำกัด โดยค่าเริ่มต้นมิฉะนั้นจะไม่ขอให้คุณยกระดับเพื่อลบไฟล์) ดูเหมือนว่ามันจะใช้งานได้จริงแม้กับแอปใหม่ RunAsInvoker หมายความว่าสืบทอดสืบทอดโทเค็น ACL ที่แน่นอน
SilverbackNet

3

หากเป็นexeไฟล์ติดตั้ง (การติดตั้ง) ที่ต้องการสิทธิ์การดูแลระบบจะมีเคล็ดลับในการเรียกใช้โดยไม่ต้องยกระดับการเข้าถึง:

หากชื่อไฟล์มีคำเช่นsetupหรือinstallwindows เรียกใช้อย่างแรงด้วยการยกระดับการเข้าถึงแม้ว่าจะไม่ต้องการการยกระดับการเข้าถึง:

ป้อนคำอธิบายรูปภาพที่นี่

หากไฟล์. exe มีไฟล์ Manifest Heuristics สำหรับระดับความสูงจะไม่ถูกนำมาใช้

นี่คือเอกสารในเอกสาร UAC (การควบคุมบัญชีผู้ใช้):

การตรวจหาตัวติดตั้งตรวจพบไฟล์ติดตั้งซึ่งช่วยป้องกันการติดตั้งไม่ให้ทำงานโดยที่ผู้ใช้ไม่ทราบและยินยอม

การตรวจหาโปรแกรมติดตั้งใช้กับ:

  • ไฟล์ที่ปฏิบัติการได้แบบ 32 บิต

  • แอปพลิเคชันที่ไม่มีแอตทริบิวต์ระดับการดำเนินการที่ร้องขอ

  • กระบวนการโต้ตอบที่ทำงานในฐานะผู้ใช้มาตรฐานโดยเปิดใช้งาน UAC

ก่อนที่จะสร้างกระบวนการแบบ 32 บิตแอ็ตทริบิวต์ต่อไปนี้จะถูกตรวจสอบเพื่อพิจารณาว่าเป็นตัวติดตั้งหรือไม่:

  • ชื่อไฟล์มีคำหลักเช่น "ติดตั้ง" "ตั้งค่า" หรือ "อัปเดต"

  • ...

อ่านโหมดที่นี่: https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works


2
แน่นอนว่าใช้ได้เฉพาะเมื่อรายการแอปพลิเคชันไม่ได้ระบุอย่างชัดเจนว่าจะต้องเรียกใช้การยกระดับ
Daniel B

3
@DanielB: อันที่จริงเคล็ดลับนี้ใช้ได้เฉพาะเมื่อไม่มีรายการ
AntoineL

1
upvoted การสังเกตที่ดี ลิงก์ไปยังเอกสารทางการก็น่าจะดีเช่นกัน
เดนิส Nikolaenko

@DenisNikolaenko Ty เพิ่มแหล่งที่มา :)
Shayan

1

ในขณะที่คำถามของเขาแอนดรูระบุว่าต่อไปนี้ไม่ได้ผล

ด้วยการแก้ไขไฟล์ที่ปฏิบัติการได้ฉันสามารถลบรายการ trustInfo จากรายการ (หรือรายการทั้งหมดดังนั้นฉันสามารถใช้รายการภายนอก) เพื่อให้โปรแกรมเริ่มต้นโดยไม่มี UAC น่าเสียดายที่สิ่งนี้แก้ไขการปฏิบัติการได้ดังนั้นจึงออกหลังจากไม่นานเนื่องจากการทดสอบการตรวจสอบภายใน

ฉันสามารถแก้ไขไฟล์. Manifest ภายนอกสำหรับซอฟต์แวร์ที่ฉันใช้และเปลี่ยนแปลงได้

<ms_asmv2:requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

ไปยัง

<ms_asmv2:requestedExecutionLevel level="asInvoker" uiAccess="false" />

ปรากฎว่าซอฟต์แวร์ที่ฉันใช้ไม่ได้ต้องการสิทธิ์ผู้ดูแลระบบจริงๆดังนั้นฉันจึงสามารถเรียกใช้บนบัญชีผู้ใช้มาตรฐานโดยไม่ต้องใช้ UAC หรือรหัสผ่านผู้ดูแลระบบ ขอบคุณ!


อาจง่ายกว่าในการแก้ไขไฟล์ที่เรียกทำงานแทนเนื่องจากไฟล์อาจรวมอยู่ในไฟล์ โปรดทราบว่าms_asmv2:อาจนำหน้าเนมสเปซออก นอกจากนี้ยังเป็นไปได้ว่าการเปลี่ยนขนาดของบล็อก xml แบบฝังอาจทำให้ไบนารีเสียหายดังนั้น "requireAdministrator" ควรเปลี่ยนเป็น "asInvoker" ซึ่งมีความยาวเท่ากันด้วยช่องว่างก่อน uiAccess
kdb

-2

ฉันแก้ไขปัญหานี้โดยไปเปลี่ยนการอนุญาตในโฟลเดอร์ที่มีโปรแกรม

ฉันเพิ่มผู้ใช้แต่ละคนที่จะเรียกใช้โปรแกรมนั้นและมอบสิทธิ์ "ควบคุมเต็มรูปแบบ" ให้พวกเขา ที่ดูแลปัญหาและฉันไม่ได้ทำเครื่องหมาย "ทำงานในฐานะผู้ดูแลระบบ"

ฉันไม่มีข้อกังวลด้านความปลอดภัยสำหรับผู้ใช้ที่จะใช้งานโปรแกรม


-5

ไม่หากโปรแกรมต้องการ UAC ก็จะพยายามเข้าถึงบางสิ่งบางอย่างที่อยู่นอกแซนด์บ็อกซ์ โปรแกรมจะทำงานไม่ถูกต้องหากไม่มีการยกระดับสิทธิ์การเข้าถึง

หากคุณต้องการกำจัดการแจ้งเตือนคุณสามารถปิดการใช้งาน UAC

ปิดใช้งาน UAC บน Windows Vista: เริ่มพิมพ์ "ผู้ใช้" คลิกที่ "บัญชีผู้ใช้" ในหน้าต่างที่ปรากฏขึ้นให้คลิกที่ "การตั้งค่าการควบคุมบัญชีผู้ใช้" จากนั้นปิด UAC

ปิดใช้งาน UAC บน Windows 7: เริ่มพิมพ์ "ผู้ใช้" คลิกที่ "การตั้งค่าการควบคุมบัญชีผู้ใช้" ลากแถบตัวเลือกไปจนสุดด้านล่างเพื่อ "ไม่แจ้งเตือน"


7
การปิดใช้งาน UAC ไม่ใช่สิ่งที่ฉันพยายามทำ นอกจากนี้: คำอธิบายของคุณเกี่ยวกับการทำงานของ UAC นั้นถูกต้องเฉพาะในแง่ทั่วไป เป็นไปได้ที่โปรแกรมจะร้องขอ UAC เมื่อไม่ต้องการใช้ และ UAC จะเกิดขึ้นก่อนที่โปรแกรมจะเริ่มทำงาน - เมื่อมีการทำงานหากเกินกว่าสิทธิ์ของโปรแกรมก็จะได้รับข้อผิดพลาดที่ได้รับอนุญาต
Andrew Russell

ซีแมนทิกส์กันคุณไม่สามารถ "ปิดใช้งาน" การแจ้งเตือน UAC สำหรับโปรแกรมเฉพาะขณะที่ยัง จำกัด การเข้าถึงของพวกเขา
James Watt

James: จริงๆแล้ว - ดูเหมือนว่าคุณจะทำได้ - ฉันได้อัปเดตคำถามแล้ว
Andrew Russell

สั้น ๆ ในการแก้ไขโค้ดโปรแกรมเองฉันอยากรู้วิธีแก้ปัญหาการทำงานหากคุณพบ
James Watt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.