2011-12-31 20 views
5

मैं निम्नलिखित कोड के साथ एक cmd कमांड को चलाने के लिए कोशिश कर रहा हूँ:भागो ऊपर उठाया प्रक्रिया

ProcessStartInfo cmd = new ProcessStartInfo("cmd.exe"); 
cmd.RedirectStandardInput = true; 
cmd.RedirectStandardOutput = true; 
cmd.RedirectStandardError = true; 
cmd.UseShellExecute = false; 
cmd.CreateNoWindow = true; 
cmd.WindowStyle = ProcessWindowStyle.Hidden; 
Process exec = Process.Start(cmd); 
exec.StandardInput.WriteLine("sc create \"BaliService\" binPath= \"{0}\\BaliService.exe\"", Directory.GetCurrentDirectory()); 

यह आदेश व्यवस्थापक privelages की आवश्यकता है, अगर मैं व्यवस्थापक के रूप में चलाने के लिए और cmd आदेश लिखें यह पूरी तरह से काम करता है लेकिन जब मैं नहीं चला व्यवस्थापक के रूप में यह ऐप। मैं एक मैनिफ़ेस्ट फ़ाइल जो यूएसी हर बार मैं exe खोलने का संकेत देता है के लिए

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

जोड़ लिया है।

मैं इस पर कई सवाल को देखा है और वे सभी एक ऊंचा एप्लिकेशन के अंतर्गत चलाने के समान अधिकार होगा ऐसी कोई भी प्रक्रिया का सुझाव करने लगते हैं, लेकिन यह मेरे लिए काम नहीं कर रहा।

मैं cmd.Verb = "runas"; लेकिन कोई पासा कोशिश की है।

+0

बदलने का प्रयास करें 'cmd.UseShellExecute' को' TRUE' और 'runas' क्रिया रहते हैं। – keyboardP

+0

बस इसे करने की कोशिश की लेकिन इस त्रुटि 'प्रक्रिया वस्तु आदेश रीडायरेक्ट करने के लिए आईओ streams.' धन्यवाद में UseShellExecute संपत्ति गलत पर सेट होना आवश्यक हो गया। –

+4

वह जगह है जहां हिरन रुक जाती है, आप दोनों तरीकों से नहीं हो सकते हैं। यूएसी एक उन्नत प्रक्रिया को हाई-जैकिंग से एक अपरिवर्तित प्रक्रिया को रोकता है। रीडायरेक्ट कर सकते हैं एकमात्र तरीका अपने आप को पहले उठाना है। –

उत्तर

13

आप Verb के लिए true को UseShellExecute स्थापित करने के लिए सम्मान किया जाना करने की जरूरत है और यह मानक आउटपुट पुनर्निर्देशित करने के लिए 'गलत' पर सेट किया जाना चाहिए। आप दोनों नहीं कर सकते हैं।

मैं यकीन है कि विंडोज भी आप व्यवस्थापक/गैर-व्यवस्थापक सुरक्षा सीमा के पार मानक इनपुट/आउटपुट/त्रुटि रीडायरेक्ट करने के लिए अनुमति नहीं दी जाएगी हूँ। व्यवस्थापक के रूप में चल रहे प्रोग्राम से आउटपुट प्राप्त करने के लिए आपको एक अलग तरीका खोजना होगा।

मैं इस लेख को पढ़ने के नहीं किया, लेकिन यह आप अधिक जानकारी दे सकते हैं: http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx

+0

मैं UseShellExecute = false का उपयोग करने का प्रयास करता हूं; क्रिया = "रनस"; RedirectStandardInput = सत्य; डोमेन = डु [0]; उपयोगकर्ता नाम = उपयोगकर्ता प्रशासक; पासवर्ड = SecureStringHelper.ToSecureString (pwd); LoadUserProfile = true; और मैनिफेस्ट में अनुरोध निष्पादन लेवल का उपयोग करना। यदि मैं UseShellExecute = true का उपयोग करता हूं; मुझे त्रुटि मिलती है प्रक्रिया ऑब्जेक्ट में उपयोगकर्ता के रूप में प्रक्रिया शुरू करने के लिए UseShellExecute प्रॉपर्टी को गलत पर सेट होना चाहिए। – Kiquenet

+0

व्यवस्थापक के रूप में चल रहे प्रोग्राम से आउटपुट प्राप्त करने के लिए पूर्ण नमूना अलग तरीका? – Kiquenet

2

आप अपने ProcessStartInfo वस्तु के लिए प्रशासनिक साख बताए कोशिश की?

SecureString password = new SecureString(); 
password.AppendChar('p'); 
password.AppendChar('w'); 
cmd.UserName = "admin"; 
cmd.Password = password; 
+0

मैं ऐसा नहीं कर सकता क्योंकि मुझे उनके लिए संकेत देने के लिए यूएसी की आवश्यकता है क्योंकि इसका उपयोग कई पीसी पर किया जाएगा, धन्यवाद। –

+0

ठीक है, समझ में आता है। क्या आप मुझे बता सकते हैं कि आप कमांड प्रक्रिया क्यों बना रहे हैं और इसे "एससी" निष्पादित करने के बजाय सीधे "एससी" कमांड चलाने के लिए निर्देशित कर रहे हैं? – Abbas

+0

मैं Winform पर एक बटन के माध्यम से स्कैन कमांड चलाने की कोशिश कर रहा हूं क्योंकि उपयोगकर्ता को स्कैन का उपयोग करने के बारे में नहीं पता होगा, बस प्रोग्राम का उपयोग करना आसान बनाने के लिए। –