एक कार्यक्रम चलाने के लिए * बिना * व्यवस्थापक विशेषाधिकार या UAC?


122

क्या कोई ऐसा तरीका है जिससे मैं किसी ऐसे प्रोग्राम को मजबूर कर सकता हूं जिसके लिए सामान्य तौर पर उनके बिना चलने के लिए प्रशासक के विशेषाधिकारों (यूएसी के माध्यम से) की आवश्यकता होती है? (अर्थात: कोई UAC प्रॉम्प्ट और सिस्टम-वाइड एक्सेस नहीं है ।)

जोड़ा गया: निष्पादन योग्य को संशोधित किए बिना।


जेम्स के जवाब के बावजूद, मैंने कुछ तरीके खोजे हैं, जो लगभग हो सकते हैं :

  1. निष्पादन को संशोधित करके मैं हटा सकते हैं trustInfoप्रकट से प्रविष्टि (या पूरी तरह से प्रकट है, तो मैं एक बाहरी एक का उपयोग कर सकते हैं), कार्यक्रम यूएसी के बिना शुरू करने के लिए अनुमति देता है। दुर्भाग्य से यह निष्पादन योग्य को संशोधित करता है, इसलिए यह आंतरिक चेकसम परीक्षण के कारण शीघ्र ही बाहर निकल जाता है।
  2. प्रोसेस एक्सप्लोरर का उपयोग करके मैं इसे लिमिटेड उपयोगकर्ता के रूप में लॉन्च कर सकता हूं। हालाँकि ऐसा लगता है कि इसे जितना मैं चाहूंगा उससे अधिक सीमित कर दूंगा (यह संरक्षित मोड IE की तरह चलता है और इसलिए मेरे मानक अन-एलीवेटेड उपयोगकर्ता की तुलना में काफी कम पहुंच सकता है)।

1
आप निष्पादन योग्य को संशोधित नहीं करने के लिए निर्दिष्ट करते हैं, फिर भी .exe को संशोधित करना आपके प्रयास में से एक है?
cutrightjm

3
@ केकज मैंने केवल यह निर्दिष्ट किया कि जब मुझे पता चला कि यह काम नहीं करेगा;)
एंड्रयू रसेल

क्या आप प्रोग्राम को निर्दिष्ट कर सकते हैं, भले ही आप इसका उपयोग न करें? यह लोगों को यह जानने में मदद कर सकता है कि यह क्या उपयोग करने की कोशिश कर रहा है जिसके लिए व्यवस्थापक विशेषाधिकारों की आवश्यकता है
cutrightjm

@ केकज दुर्भाग्य से नहीं। हालांकि यह विशेष रूप से प्रासंगिक नहीं है: प्रक्रिया निर्माण के दौरान उन्नयन (सामान्य तरीके से - जैसा कि इस मामले में है - प्रकट होने के साथ होता है) यूएसी को एक कार्यक्रम द्वारा ट्रिगर किया जाता है। एक बार एक प्रक्रिया शुरू हो जाने के बाद, यह अपनी ऊंचाई की स्थिति को बदल नहीं सकता है - कोई फर्क नहीं पड़ता कि यह प्रतिबंधित संसाधनों का उपयोग करने की कोशिश करता है।
एंड्रयू रसेल

यदि किसी कार्यक्रम में कोई प्रकट नहीं होता है और कोई व्यवस्थापक विशेषाधिकारों के साथ चलने से इनकार करता है, तो यह यूएसी इंस्टॉलर डिटेक्शन के कारण सबसे अधिक संभावना है। मैंने यह सवाल पोस्ट किया है और misha256 का एक अच्छा समाधान है। मैंने इसका परीक्षण किया और मैं पुष्टि कर सकता हूं कि यह काम करता है। superuser.com/questions/857616/… मैंने कुछ शोध किए और मैंने पाया कि इंस्टॉलर डिटेक्शन के मौजूद होने का कोई कारण नहीं है। ध्यान दें कि यदि व्यवस्थापक विशेषाधिकारों के कारण प्रकट रूप में एक भरोसेमंद प्रविष्टि होती है, तो जाहिर है कि यह काम नहीं करेगा।
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और इसे विंडोज रजिस्ट्री में जोड़ें। (इस पर डबल क्लिक करके ट्रिक करनी चाहिए।)

बाद में, उस एप्लिकेशन पर राइट-क्लिक करें जिसे आप बिना प्रशासनिक विशेषाधिकार के चलाना चाहते हैं और "विशेषाधिकार के बिना चलाएं" चुनें।

कुछ मामलों में - छोटी राशि के 0.1% कार्यक्रम दो बार यूएसी प्रॉम्प्ट के बारे में पूछ सकते हैं।


1
मैं अनुप्रयोग संगतता टूलकिट शिम का उपयोग करता था, लेकिन वह प्रत्येक फ़ाइल के लिए रजिस्ट्री में प्रत्येक निष्पादन योग्य और बाएं कबाड़ के लिए बहुत काम था। यह तरीका काम करता है और मुझे यह बहुत अच्छा लगता है।
बेन वोइग्ट

2
यह स्वीकार करते हुए कि यह सबसे सीधा तरीका लगता है, और मैं ( अंत में! ) इसे सत्यापित करने में सक्षम रहा हूं । इसके अलावा एक एक बार बंद कमांड लाइन के रूप में तुच्छता से प्रयोग करने योग्य होने का बहुत अच्छा संपत्ति (बाहरी हटाने है "और फिर बारी \"में ")।
एंड्रयू रसेल

1
मेरे पास @Derek जैसा ही मुद्दा है, एप्लिकेशन को लगातार UAC के लिए फिर से पूछते हुए लगता है, मुझे सिस्टम वाइड एक्सेस के साथ इस पर भरोसा नहीं है, लेकिन मुझे इसकी कार्यक्षमता की आवश्यकता है ..
Gizmo

1
आप केवल कुंजियों को बदलकर वर्तमान में हस्ताक्षरित उपयोगकर्ता के लिए रजिस्ट्री में इसे जोड़ सकते हैं: HKEY_CURRENT_USER \ Software \ Classes * \ shell \ forcerunasinvoker और HKEY_CURRENT_USER_ Software \ Classes * \ shell \ forcerunasinvoker \ कमांड
GodEater

1
@ jpmc26 मुझे लगता है /minकि एक त्रुटि है। समाधान इसके बिना ठीक उसी तरह काम करता है। उल्टी को मिश्रित cmdऔर startस्विच होना चाहिए । ऐसा लगता है कि cmd.exeगलत स्विच की शिकायत नहीं है। cmd /whateverउदाहरण के लिए कोशिश करें ।
cdlvcdlv

53

इसे सहेजें nonadmin.bat:

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

अब आप उन्हें बिना किसी व्यवस्थापक के चलाने के लिए प्रोग्राम को ड्रैग और ड्रॉप कर सकते हैं।

यह रजिस्ट्री कुंजी के रूप में बदलने के रूप में व्यवस्थापक विशेषाधिकारों की आवश्यकता नहीं है। इसके अलावा, आप संदर्भ मेनू को अव्यवस्थित नहीं करेंगे।

वोम के उत्तर के आधार पर


अद्यतन: अब उन कार्यक्रमों के साथ काम करना चाहिए जिनके नाम में रिक्त स्थान हैं।


मैंने इसे अपने ड्राइव पर पहुँच की आवश्यकता वाले कुछ कार्यक्रमों पर आज़माया और यह उनका पता नहीं लगा सका या पहली जगह में काम नहीं कर पाया: / (rufus rufus.akeo.ie उदाहरण के लिए)
कीनबेल

7
@keinabel शायद यही है क्योंकि उन्हें वास्तव में काम करने के लिए व्यवस्थापक की आवश्यकता थी। यह स्क्रिप्ट उन कार्यक्रमों के लिए है जो वास्तव में ऐसा कुछ किए बिना विशेषाधिकारों की मांग करते हैं जिनके लिए इसकी आवश्यकता होती है। ड्राइव के लिए कच्चे पहुंच एक सामान्य व्यवस्थापक-चीज़ है।
हजूल

2
काफी साफ़! इस विधि का उपयोग करके XAMPP को स्थापित करने में सक्षम था।
कृष्णराज

यह मेरे लिए "C: \ Program Files \ ..." निर्देशिका में किसी भी निष्पादनयोग्य के लिए काम नहीं करता प्रतीत होता है। मुझे ए Windows cannot find 'C:\Program'. Make sure you typed the name correctly, and then try again। मैंने इस कमांड को कई बार मामूली बदलावों के साथ मैन्युअल रूप से आज़माया है और कोई भाग्य नहीं। कोई विचार?
जेक स्मिथ

1
मेरे पास फ़ाइल के स्थान में रिक्त स्थान वाले फ़ोल्डर में एक ही समस्या थी। कुछ दोहरे उद्धरण चिह्नों को हल करते हुए: cmd / min / C "सेट __COMPAT_LAYER = RUNASINVOKER &&" "% 1"
ragnar

35

मुझे उम्मीद है कि मुझे पार्टी में बहुत देर नहीं हुई है, लेकिन मैं इसी तरह के प्रश्न की तलाश में था और यहां एक उत्तर देखे बिना मुझे पता चला कि विंडोज 'अंतर्निहित RunAsकमांड, जब प्रशासक के रूप में चलाया जाता है, /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.

यह मेरे मामले में काम आया। विडंबना यह है कि उन्नयन के बिना स्पष्ट रूप से एक कार्यक्रम शुरू करने के लिए एक उन्नत कमांड प्रॉम्प्ट की आवश्यकता होती है । जाओ पता लगाओ। :) मुझे उम्मीद है इससे आपको मदद मिली होगी।


मैं पुष्टि कर सकता हूं कि यह काम नहीं करता है। मैंने अभी इसका परीक्षण किया और एक त्रुटि मिली: "रनरस एरोर: चलाने में असमर्थ - (यहां प्रोग्राम का नाम)। अनुरोध किए गए ऑपरेशन को उत्थान की आवश्यकता है"।
user1258361

9
@ user1258361 आपको इस कमांड को एलिवेटेड प्रॉम्प्ट से चलाना है, जैसे मैंने बोल्ड में लिखा है ...
Mxx

यह विंडोज 7 पर एक ऊंचा संकेत की आवश्यकता नहीं लगती है ...
सैम बीपी

4
उन्नत प्रॉम्प्ट के साथ परीक्षण किया गया, कमांड लाइन रनस / ट्रस्टलेवल का उपयोग किया गया: 0x20000 (प्रोग्राम), प्रोग्राम वैसे भी व्यवस्थापक के रूप में चला। संदर्भ के लिए, 0x20000 मूल उपयोगकर्ता है।
user1258361

2
एक उन्नत कमांड प्रॉम्प्ट की आवश्यकता है ... निश्चित रूप से यह करता है। अन्यथा आप पहले से ही व्यवस्थापक अधिकारों के बिना हैं और आपके द्वारा शुरू की गई किसी भी प्रक्रिया में भी उनकी कमी होगी।
Twisty अभिनय

16

यदि आपके पास एक विशेष एप्लिकेशन है जिसे आप हमेशा यूएसी के बिना चलाना चाहते हैं, तो आप इसे रजिस्ट्री के साथ लक्षित कर सकते हैं (पाठ को एक आरईजी फ़ाइल में जोड़ें और इसे रजिस्ट्री में आयात करें):

Windows Registry Editor Version 5.00

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

इस उत्तर के विपरीत , इस समाधान के लिए उपयोगकर्ता के इंटरैक्शन पर कोई वैकल्पिक क्लिक या परिवर्तन की आवश्यकता नहीं है।

Microsoft इस प्रक्रिया को RunAsInvoker "संगतता शिम" कहते हैं


एक अलग, फिर भी संबंधित प्रश्न के उत्तर ने इस उत्तर की प्रेरणा प्रदान की।
palswim

1
आपका बहुत बहुत धन्यवाद! मेरे लिए यही एक काम था! मेरे पास एप्लिकेशन था जो विंडोज़ संदर्भ मेनू से बुलाया जा रहा था, और यह हमेशा प्रशासक के रूप में आ रहा था, इसके बावजूद कि इसे हर जगह से सही ढंग से बुलाया जा रहा था। इस फिक्स के बाद, एप्लिकेशन को सही ढंग से कॉल किया जाने लगा।
उपयोगकर्ता

3

मैंने आज MS अनुप्रयोग अनुकूलन टूलकिट का उपयोग करके इस समस्या को हल किया।

मैंने एक तकनीकी गणतंत्र लेख में निर्देशों का पालन किया

मूल रूप से:

1) आपको यहाँ MS से टूलकिट मिलता है

2) फिक्स पर क्लिक करें

3) RunAsInvoker विकल्प चुनें

4) ठीक पर क्लिक करें और इंस्टॉल चुनें


आपका उत्तर वांछित प्रभाव के बिल्कुल विपरीत है। मूल प्रश्न यह था कि कैसे एक ऐप को मजबूर किया जाए जो एलिवेटेड विशेषाधिकारों के लिए बिना उत्थान के चलने के लिए कहता है। आपका उत्तर अभी भी UAC का उपयोग करता है, लेकिन बस उस संकेत को अक्षम करता है। इस प्रश्न का गलत उत्तर है।
एमएक्स

@ एमएक्स वास्तव में नहीं। यदि वर्तमान उपयोगकर्ता सीमित है (या आपको यूएसी सक्षम मिला है), तो प्रक्रिया पूरी तरह से सीमित विशेषाधिकारों के साथ लॉन्च होगी।
लॉजिकडेमॉन

1
@LogicDaemon यदि आप वास्तव में लेख पढ़ते हैं, तो आप देखेंगे कि यह बताता है कि यदि आप उन चरणों का पालन करते हैं, तो आप यूएसी प्रॉम्प्ट के बिना प्रशासक के रूप में एक ऐप चलाएंगे । यह ओपी द्वारा मांगे जाने के विपरीत है।
Mxx

@ एमएक्स नोप। पर पढ़ें TechNet क्या RunAsInvoker वास्तव में करते हैं। यह वास्तव में किस विषय के लिए पूछा गया था, हालांकि यह केवल पुराने ऐप्स के लिए काम करता है।
लॉजिकडैमन

जब तक एक्सप्लोरर, एक गैर-व्यवस्थापक cmd, या कोई अन्य मानक प्रक्रिया अभिभावक है, RunAsInvoker समान सीमित अधिकारों के साथ चलेगा। (एक्सप्लोरर डिफ़ॉल्ट रूप से प्रतिबंधित है, अन्यथा यह आपको कभी भी किसी फ़ाइल को हटाने के लिए उन्नत करने के लिए नहीं कहेगा।) यह वास्तव में नए ऐप्स के साथ भी काम करता है। RunAsInvoker का मतलब है कि यह ठीक उसी ACL टोकन को विरासत में मिला है।
सिल्वरबैकनेट

3

यदि यह एक सेटअप (स्थापना) exeफ़ाइल है जिसे प्रशासन के विशेषाधिकार की आवश्यकता होती है, तो इसे उन्नत पहुंच के बिना चलाने की एक चाल है:

यदि फ़ाइल के नाम में ऐसे शब्द हैं जैसे कि setupया installविंडोज़ जबरदस्ती इसे एलीवेटेड एक्सेस के साथ चलाता है, भले ही इसके लिए एलीवेटेड एक्सेस की आवश्यकता न हो:

यहाँ छवि विवरण दर्ज करें

यदि .exe फ़ाइल में कोई प्रकटन है, तो ऊँचाई के लिए ये आंकड़े लागू नहीं होते हैं।

यह UAC (उपयोगकर्ता खाता नियंत्रण) डॉक्स पर प्रलेखित है:

इंस्टॉलर का पता लगाना सेटअप फ़ाइलों का पता लगाता है, जो इंस्टॉलेशन को उपयोगकर्ता के ज्ञान और सहमति के बिना चलाने से रोकने में मदद करता है।

इंस्टॉलर का पता केवल इस पर लागू होता है:

  • 32-बिट निष्पादन योग्य फ़ाइलें।

  • अनुरोधित निष्पादन स्तर विशेषता के बिना अनुप्रयोग।

  • यूएसी सक्षम के साथ एक मानक उपयोगकर्ता के रूप में चलने वाली इंटरएक्टिव प्रक्रियाएं।

32-बिट प्रक्रिया बनने से पहले, यह इंस्टॉलर है या नहीं यह निर्धारित करने के लिए निम्न विशेषताओं की जाँच की जाती है:

  • फ़ाइल नाम में "इंस्टॉल," "सेटअप" या "अपडेट" जैसे कीवर्ड शामिल हैं।

  • ...

यहाँ पढ़ें मोड: https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works


2
बेशक, यह केवल तभी काम करता है जब एप्लिकेशन मेनिफेस्ट स्पष्ट रूप से निर्दिष्ट नहीं करता है कि इसे ऊंचा चलना चाहिए।
डैनियल बी


1
Upvoted। अच्छा अवलोकन। आधिकारिक डॉक्स का लिंक भी अच्छा होगा।
डेनिस निकोलाेंको

@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 ब्लॉक का आकार बदलने से बाइनरी भ्रष्ट हो सकती है, इसलिए "आवश्यकता एडिलेटर" को uiAccess से पहले रिक्त स्थान के साथ समान लंबाई में "asInvoker" में बदल दिया जाना चाहिए।
kdb

-2

मैंने इस समस्या को उस फ़ोल्डर में अनुमतियों को बदलकर तय किया जिसमें कार्यक्रम शामिल था।

मैंने प्रत्येक उपयोगकर्ता को जोड़ा जो उस कार्यक्रम को चलाएगा और उन्हें "पूर्ण नियंत्रण" निजीकृत देगा। इसने समस्या का ध्यान रखा और मैंने "रन ऑफ एडमिन" को अनियंत्रित कर दिया।

मेरे पास उन उपयोगकर्ताओं के लिए कोई सुरक्षा चिंता नहीं है जो प्रोग्राम चला रहे होंगे।


-5

नहीं, अगर किसी प्रोग्राम को UAC की आवश्यकता है तो वह अपने सैंडबॉक्स के बाहर कुछ एक्सेस करने की कोशिश कर रहा है। एलिवेटेड एक्सेस के बिना प्रोग्राम सही ढंग से नहीं चलेगा।

यदि आप केवल अधिसूचना से छुटकारा चाहते हैं, तो आप UAC को अक्षम कर सकते हैं।

Windows Vista पर UAC अक्षम करें: प्रारंभ करें, "उपयोगकर्ता" लिखें। "उपयोगकर्ता खाते" पर क्लिक करें। पॉप अप करने वाली विंडो पर, "उपयोगकर्ता खाता नियंत्रण सेटिंग्स" पर क्लिक करें और फिर UAC को बंद करें।

विंडोज 7 पर यूएसी को अक्षम करें: प्रारंभ करें, "उपयोगकर्ता" टाइप करें। "उपयोगकर्ता खाता नियंत्रण सेटिंग्स" पर क्लिक करें। "कभी नहीं सूचित करें" के लिए नीचे की तरफ सभी तरह की पसंद पट्टी खींचें।


7
UAC को अक्षम करना वह नहीं है जिसे मैं प्राप्त करने की कोशिश कर रहा हूं। इसके अलावा: यूएसी कैसे काम करता है, इसका आपका वर्णन केवल एक सामान्य अर्थ में सही है। UAC से अनुरोध करने के लिए एक कार्यक्रम के लिए यह संभव है जब इसे सख्ती से इसकी आवश्यकता नहीं होती है। और UAC एक कार्यक्रम शुरू होने से पहले होता है - एक बार इसके चलने के बाद, यदि यह इसकी अनुमतियों से आगे बढ़ता है, तो इसे केवल अनुमति-अस्वीकृत त्रुटियां मिलेंगी।
एंड्रयू रसेल

शब्दार्थ एक तरफ, आप एक विशिष्ट कार्यक्रम के लिए यूएसी नोटिफिकेशन को "अक्षम" नहीं कर सकते, जबकि अभी भी उनकी पहुंच सीमित है।
जेम्स वाट

जेम्स: वास्तव में - ऐसा लगता है कि आप कर सकते हैं - मैंने अपना प्रश्न अपडेट कर दिया है।
एंड्रयू रसेल

कार्यक्रम कोड को संशोधित करने के लिए लघु, मुझे एक काम समाधान के बारे में जानने में रुचि होगी यदि आप एक पाते हैं।
जेम्स वाट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.