2010-02-17 9 views
20

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

जब मुझे इसकी आवश्यकता होती है तो मैं केवल प्रोग्रामिक रूप से उन्नयन का अनुरोध कैसे कर सकता हूं?

मैं उपयोग कर रहा हूँ सी #

उत्तर

24
WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); 
bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator); 

if (!hasAdministrativeRight) 
{ 
    RunElevated(Application.ExecutablePath); 
    this.Close(); 
    Application.Exit(); 
} 

private static bool RunElevated(string fileName) 
{ 
    //MessageBox.Show("Run: " + fileName); 
    ProcessStartInfo processInfo = new ProcessStartInfo(); 
    processInfo.Verb = "runas"; 
    processInfo.FileName = fileName; 
    try 
    { 
     Process.Start(processInfo); 
     return true; 
    } 
    catch (Win32Exception) 
    { 
     //Do nothing. Probably the user canceled the UAC window 
    } 
    return false; 
} 
+2

यह सही जवाब है, लेकिन 'RunElevated' शायद एक' bool' लौट जाना चाहिए, ताकि आप उपयोगकर्ता को रद्द कर दिया है, तो ऊंचाई में शिकायत कर सकते हैं। –

+2

इसके अलावा, चूंकि आप सहेजने और ऐप को पुनरारंभ करने जा रहे हैं, अगर वहां सेव करने के लिए राज्य है, तो उसका ख्याल रखें। आप उस सामान को विभाजित करना पसंद कर सकते हैं जिसके लिए ऊंचाई और लॉन्च की आवश्यकता है जो मुख्य ऐप को बंद किए बिना उठाया गया हो। –

संबंधित मुद्दे