ป้องกันการยกระดับ (UAC) สำหรับแอปพลิเคชันที่ไม่ต้องการ [ซ้ำ]


34

คำถามนี้มีคำตอบอยู่ที่นี่แล้ว:

เมื่อเร็ว ๆ นี้ต้องย้ายข้อมูลจาก Vista 32 บิตไปเป็น Windows 7 64 บิตหนึ่งในโปรแกรมของฉันต้องการสิทธิ์ผู้ดูแลระบบ

ฉันใช้โปรแกรมแก้ไขข้อความที่ค่อนข้างแปลกใหม่ (Crimson Editor) แม้ว่าจะไม่ได้ออกแบบมาสำหรับ Vist / Win7 แต่ก็ทำงานได้ดีกับ Vista แต่ภายใต้ Windows 7 โปรแกรมที่เรียกใช้งานได้รับการเพิ่ม UAC shield นี้ให้กับไอคอนของมัน (แม้ว่าจะไม่มีการตั้งค่าสถานะ "Run as administrator" ในแท็บความเข้ากันได้ ) และแจ้งให้ยกระดับเมื่อใดก็ตามที่ฉันเรียกใช้

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

คำตอบ:


22

ไม่เหตุผลที่ Crimson Editor ทำเช่นนี้ไม่ใช่เพราะไม่ได้ลงชื่อ (และนี่ไม่ใช่สิ่งใหม่สำหรับ Win7) requestedPrivilegeLevel="highestLevel"มันเป็นเพราะประจักษ์แอพลิเคชันซึ่งจะถูกฝังอยู่ที่รวบรวมเวลาที่ระบุ

ตามที่โพสต์ในฟอรัมนี้ผู้พัฒนา Crimson Editor ได้ทำการเปลี่ยนแปลงในการแก้ไข 237-241 พวกเขาทำสิ่งนี้เพราะคุณสมบัติ "เพิ่มตัวแก้ไข Crimson ในเมนูบริบทของเปลือก" ต้องใช้สิทธิ์ผู้ดูแลระบบ

การแก้ไขระยะยาวน่าจะเป็นสำหรับนักพัฒนา Crimson Editor เพื่อแก้ไขรายการแอปพลิเคชันของพวกเขา พวกเขาควรเพิ่มตัวเองลงในเมนูบริบทของเชลล์ในระหว่างการติดตั้งหรืออย่างน้อยก็บอกผู้ใช้ว่าพวกเขาต้องเรียกใช้แอปที่ยกระดับด้วยตนเอง (ซึ่งง่ายต่อการทำ) แทนที่จะต้องใช้มัน

สำหรับแอพทั้งหมดที่requestedPrivilegeLevel="highestLevel"อยู่ในรายการ (ใช้Manifest Viewเพื่อดูรายการแอปพลิเคชัน) คุณสามารถใช้Tool Compatibility Toolkitของ Microsoft เพื่อส่งแอปพลิเคชันด้วยการแก้ไข RunAsInvoker ซึ่งบังคับให้แอปทำงานด้วยโทเค็นผู้ใช้มาตรฐานของคุณ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้ Application Compatibility Toolkit ดูโพสต์นี้เกี่ยวกับการใช้มันเป็นสีแดงเข้มแก้ไขหรือคำแนะนำทั่วไป


1
หรือคุณสามารถแทนที่รายการที่มีอยู่โดยใช้เครื่องมือบรรทัดคำสั่ง mt.exe ซึ่งคุณสามารถใช้ได้ฟรีกับ Visual Studio Express (longwinded แต่คุ้มค่าถ้าคุณประสบปัญหานี้มาก) โปรดทราบว่าการแทนที่รายการที่ฝังอยู่จะเปลี่ยนไฟล์. exe ดังนั้น a) ตรวจสอบให้แน่ใจว่าคุณมีสำเนาของมันในกรณีที่คุณทำสิ่งต่าง ๆ และ b) ถ้ามันถูกเซ็นชื่อคุณจะทำลายลายเซ็น (แต่ในกรณีนี้คุณมี พิจารณาแล้วว่ายังไม่ได้ลงชื่อ)
AdamV

the.d.stro คุณเป็นผู้ช่วยชีวิตมันใช้งานได้ดี
phloopy

1
+1 สำหรับ"แก้ไขแอปพลิเคชันของพวกเขา"และใช้ชุดเครื่องมือ AppCompat เพื่อแก้ไขข้อบกพร่องสำหรับพวกเขา
เอียนบอยด์

13

ฉันพบว่าฉันมีสองแอปพลิเคชันที่มีปัญหานี้ หนึ่งมี 'update' ในชื่อไฟล์และอื่น ๆ มี 'update' ใน 'FileDecsription' ฉันเพิ่งลบคำว่า 'update' ออกจากสองแอปพลิเคชันนี้และไม่มีคำเตือนของ UAC อีกต่อไป ฉันพบข้อมูลภายใต้ 'วิธีการทำงานของ UAC' - 'การตรวจจับการติดตั้ง' ที่:

http://msdn.microsoft.com/en-us/library/aa905330.aspx

ซึ่งระบุสิ่งต่อไปนี้:

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

  • ไฟล์เรียกทำงาน 32 บิต
  • แอปพลิเคชันที่ไม่มีการร้องขอ ExecutionLevel
  • กระบวนการโต้ตอบที่ทำงานในฐานะผู้ใช้มาตรฐานที่เปิดใช้งาน UAC

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

  • ชื่อไฟล์ประกอบด้วยคำหลักเช่น "ติดตั้ง" "ตั้งค่า" และ "อัปเดต"
  • คำสำคัญในฟิลด์ทรัพยากรการกำหนดเวอร์ชันต่อไปนี้: ผู้ขาย, ชื่อ บริษัท , ชื่อผลิตภัณฑ์, คำอธิบายไฟล์, ชื่อไฟล์ดั้งเดิม, ชื่อภายในและชื่อส่งออก
  • คำหลักในรายการแอปพลิเคชันแบบเคียงข้างกันซึ่งฝังอยู่ในไฟล์เรียกทำงาน
  • คำสำคัญในรายการ StringTable เฉพาะที่ลิงก์ในไฟล์เรียกทำงาน
  • แอ็ตทริบิวต์คีย์ในข้อมูลไฟล์ทรัพยากรที่ลิงก์ในไฟล์เรียกทำงาน
  • ลำดับเป้าหมายของไบต์ภายในไฟล์ที่เรียกใช้งานได้

  • หมายเหตุ: คำหลักและลำดับของไบต์มาจากลักษณะทั่วไปที่สังเกตได้จากเทคโนโลยีตัวติดตั้งต่างๆ


7

หากคุณมี Visual Studio คุณสามารถทำสิ่งต่อไปนี้:

  1. เปิด Visual Studio ในฐานะผู้ดูแล
  2. กด Ctrl-O เพื่อเปิดไฟล์
  3. เรียกดูโฟลเดอร์ที่ Crimson Editor เป็นและเปิด cedt.exe
  4. ไฟล์ถูกเปิดโดยใช้ตัวแก้ไขรีซอร์สและคุณจะเห็นต้นไม้ที่มีสาขาชื่อ RT_MANIFEST ขยายไฟล์นี้และดับเบิลคลิกที่รายการย่อยเดียวที่ชื่อว่า "1 [English United States]"
  5. ประมาณสามในสี่ของวิธีลงในคอลัมน์ด้านขวาคุณจะเห็น RequestExecutionLevel level = "maximumAvailable" เปลี่ยน "maximumAvailable" เป็น "asInvoker" (NB บรรณาธิการจะเปิดในโหมด over-type ตามค่าเริ่มต้น
  6. บันทึกไฟล์และคุณทำเสร็จแล้ว

HTH

Kevan


4

มีข้อมูลบางอย่างเกี่ยวกับการวิเคราะห์พฤติกรรมที่นี่: http://msdn.microsoft.com/en-us/library/aa905330.aspx

รายการสามารถช่วยควบคุมสิ่งเหล่านี้บางอย่าง


MSDN พูดถึง "ฝัง" รายการ มันไม่ได้ทำเมื่อรวบรวมโปรแกรม? ฉันต้องคอมไพล์ Crimson Editor ด้วยตัวเองหรือไม่
SealedSun

5
คุณสามารถเพิ่มไฟล์ filename.exe.manifest ในโฟลเดอร์เดียวกันและ Windows จะอ่านอย่างเหมาะสม
Factor Mystic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.