एक बार जब मेरा प्रोग्राम क्लाइंट मशीन पर स्थापित हो जाता है, तो मैं अपने प्रोग्राम को विंडोज 7 पर एक प्रशासक के रूप में चलाने के लिए कैसे मजबूर करूं ?
एक बार जब मेरा प्रोग्राम क्लाइंट मशीन पर स्थापित हो जाता है, तो मैं अपने प्रोग्राम को विंडोज 7 पर एक प्रशासक के रूप में चलाने के लिए कैसे मजबूर करूं ?
जवाबों:
आप कार्यक्रम में एम्बेडेड प्रकट होने वाले बदलाव को संशोधित करना चाहते हैं। यह विजुअल स्टूडियो 2008 और उच्चतर पर काम करता है: प्रोजेक्ट + नया आइटम जोड़ें, "एप्लिकेशन मैनिफ़ेस्ट फ़ाइल" चुनें। <requestedExecutionLevel>
तत्व को इसमें बदलें :
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
कार्यक्रम शुरू करने पर उपयोगकर्ता को UAC संकेत मिलता है । बुद्धिमानी से उपयोग करें; उनका धैर्य जल्दी से बाहर हो सकता है।
requestedExecutionLevel
अपने प्रकट करने के लिए एक तत्व जोड़ना केवल आधी लड़ाई है; आपको याद रखना होगा कि UAC को बंद किया जा सकता है। यदि यह है, तो आपको पुराने स्कूल के तरीके की जांच करनी होगी और यदि उपयोगकर्ता प्रशासक नहीं है
( IsInRole(WindowsBuiltInRole.Administrator)
अपने थ्रेड पर कॉल करें CurrentPrincipal
) तो एक त्रुटि संवाद करना होगा ।
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
और साथ ही
IsInRole
, एंडर्स के बारे में बात करता है।
विस्तृत चरण निम्नानुसार हैं।
ध्यान दें कि इस कोड का उपयोग करके आपको क्लिकऑन की सुरक्षा सेटिंग्स को बंद करने की आवश्यकता है, ऐसा करने के लिए, गुणों के अंदर जाएं -> सुरक्षा -> क्लिकऑन सुरक्षा
New Item...
मेरी इंस्टॉलर सेवा परियोजना पर कोई विकल्प नहीं है। मैं ऐप मैनिफ़ेस्ट जोड़ने के बारे में कैसे जाऊँगा? मैं इसे अपने मुख्य प्रोजेक्ट में जोड़ सकता हूं लेकिन यह इंस्टॉलर नहीं है।
मैंने इसे मैन्युअल रूप से करने के लिए कुछ कोड लागू किया है:
using System.Security.Principal;
public bool IsUserAdministrator()
{
bool isAdmin;
try
{
WindowsIdentity user = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(user);
isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch (UnauthorizedAccessException ex)
{
isAdmin = false;
}
catch (Exception ex)
{
isAdmin = false;
}
return isAdmin;
}
आप EXE फ़ाइल में एक मैनिफ़ेस्ट फ़ाइल को एम्बेड कर सकते हैं, जिससे विंडोज (7 या उच्चतर) हमेशा प्रोग्राम को व्यवस्थापक के रूप में चलाएगा।
आप चरण 6 में अधिक विवरण पा सकते हैं : एक एप्लिकेशन मेनिफेस्ट (यूएसी) और एमएसएमडीएन बनाएं और एम्बेड करें ।
विजुअल स्टूडियो 2008 पर काम करते समय, राइट क्लिक करें Project -> Add New Item
और फिर चुना गया Application Manifest File
।
मैनिफ़ेस्ट फ़ाइल में, आपको टैग मिलेगा requestedExecutionLevel
, और आप तीन मानों का स्तर निर्धारित कर सकते हैं:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
या
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
या
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
व्यवस्थापक के रूप में चलाने के लिए अपने आवेदन को निर्धारित करने के लिए, आपको मध्य को चुनना होगा।
के अनुसार
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
यदि आप पहले से ही एक नहीं है या एक जोड़ने के लिए पता नहीं है, तो आप एक आवेदन प्रकट जोड़ना चाहते हैं। जैसा कि कुछ प्रोजेक्ट स्वचालित रूप से एक अलग मैनिफ़ेस्ट फ़ाइल नहीं जोड़ते हैं, पहले प्रोजेक्ट गुणों पर जाएं, एप्लिकेशन टैब पर जाएं और यह सुनिश्चित करने के लिए जांचें कि आपका प्रोजेक्ट टैप के निचले भाग में प्रकट को बाहर नहीं कर रहा है।
दृश्य स्टूडियो 2010 में अपने प्रोजेक्ट का नाम राइट क्लिक करें। हिट "विंडोज सेटिंग्स देखें", यह उत्पन्न करता है और "app.manifest" नामक एक फ़ाइल खोलता है। इस फ़ाइल के भीतर "asInvoker" को "आवश्यकताअनुकूलक" के साथ बदलें जैसा कि फ़ाइल के भीतर टिप्पणी अनुभागों में बताया गया है।
ऐसा करने का एक अन्य तरीका, केवल कोड में, यह पता लगाना है कि क्या प्रक्रिया @NG द्वारा उत्तर की तरह व्यवस्थापक के रूप में चल रही है। । और फिर एप्लिकेशन को फिर से खोलें और वर्तमान को बंद करें।
मैं इस कोड का उपयोग तब करता हूं जब किसी एप्लिकेशन को केवल कुछ शर्तों के तहत चलाने के लिए व्यवस्थापक विशेषाधिकारों की आवश्यकता होती है, जैसे कि सेवा के रूप में खुद को स्थापित करते समय। इसलिए इसे हर समय व्यवस्थापक के रूप में चलाने की आवश्यकता नहीं है, क्योंकि अन्य उत्तर इसे भी मजबूर करते हैं।
नीचे दिए गए कोड में नोट NeedsToRunAsAdmin
एक विधि है जो पता लगाती है कि क्या मौजूदा परिस्थितियों में व्यवस्थापक विशेषाधिकार की आवश्यकता है। यदि यह रिटर्न देता है false
तो कोड खुद को ऊंचा नहीं करेगा। यह दूसरों पर इस दृष्टिकोण का एक प्रमुख लाभ है।
हालांकि इस कोड में ऊपर बताए गए फायदे हैं, लेकिन इसे खुद को एक नई प्रक्रिया के रूप में फिर से लॉन्च करने की आवश्यकता है जो हमेशा वह नहीं है जो आप चाहते हैं।
private static void Main(string[] args)
{
if (NeedsToRunAsAdmin() && !IsRunAsAdmin())
{
ProcessStartInfo proc = new ProcessStartInfo();
proc.UseShellExecute = true;
proc.WorkingDirectory = Environment.CurrentDirectory;
proc.FileName = Assembly.GetEntryAssembly().CodeBase;
foreach (string arg in args)
{
proc.Arguments += String.Format("\"{0}\" ", arg);
}
proc.Verb = "runas";
try
{
Process.Start(proc);
}
catch
{
Console.WriteLine("This application requires elevated credentials in order to operate correctly!");
}
}
else
{
//Normal program logic...
}
}
private static bool IsRunAsAdmin()
{
WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(id);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
runas
एक गैर-व्यवस्थापक उपयोगकर्ता से व्यवस्थापक के रूप में कुछ भी लॉन्च करने का मौका देने के लिए UAC सक्षम होना चाहिए , अन्यथा यह वर्तमान उपयोगकर्ता अनुमतियों (विंडोज़ 7 64 बिट पर जाँच) के साथ चुपचाप खुल जाएगा। जहाँ तक मैं केवल वही चीज़ बता सकता हूँ जो आप यूएसी विकलांगों के साथ कर सकते हैं और जो अधिकार सुरक्षित है वह एक उचित क्षण में निष्पादन को रोकना है।
आप क्लिकऑन सिक्योरिटी सेटिंग्स का उपयोग कर मैनिफ़ेस्ट बना सकते हैं, और फिर उसे अक्षम कर सकते हैं:
Right click on the Project -> Properties -> Security -> Enable ClickOnce Security Settings
आपके द्वारा इसे क्लिक करने के बाद, प्रोजेक्ट के गुण फ़ोल्डर के अंतर्गत एक फ़ाइल बनाई जाएगी, जिसे app कहा जाता है। इसे बनाते ही, आप Enable ClickOnce Security Settings
विकल्प को अनचेक कर सकते हैं
उस फ़ाइल को खोलें और इस लाइन को बदलें:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
सेवा:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
इससे प्रोग्राम को व्यवस्थापक विशेषाधिकारों की आवश्यकता होगी।
यह इस उत्तर का एक सरलीकृत संस्करण है , @NG द्वारा ऊपर
public bool IsUserAdministrator()
{
try
{
WindowsIdentity user = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(user);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch
{
return false;
}
}
अपने निष्पादन योग्य पर क्लिक करें, गुण> संगतता पर जाएं और 'इस प्रोग्राम को व्यवस्थापक के रूप में चलाएं' बॉक्स को चेक करें।
यदि आप इसे सभी उपयोगकर्ताओं के लिए व्यवस्थापक के रूप में चलाना चाहते हैं, तो 'सभी उपयोगकर्ताओं के लिए सेटिंग बदलें' में समान कार्य करें।