2011-09-30 8 views
8

मेरा कोड यहाँ है:कमांड के साथ व्यवस्थापक के रूप में cmd ​​चलाने के लिए?

try 
{ 
    ProcessStartInfo procStartInfo = new ProcessStartInfo(
              "cmd.exe", 
              "/c " + command); 
    procStartInfo.UseShellExecute = true; 
    procStartInfo.CreateNoWindow = true; 
    procStartInfo.Verb = "runas"; 
    procStartInfo.Arguments = "/env /user:" + "Administrator" + " cmd" + command; 

    ///command contains the command to be executed in cmd 
    System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
    proc.StartInfo = procStartInfo; 
    proc.Start(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

मैं

procStartInfo.UseShellExecute = true 
procStartInfo.RedirectStandardInput = false; 

रखना चाहता हूं process.standardinput का उपयोग किए बिना कमांड निष्पादित करना संभव है? मैं आदेश में निष्पादित आदेश को निष्पादित करने का प्रयास करता हूं लेकिन आदेश निष्पादित नहीं होता है।

+0

** यह process.standardinput का उपयोग किए बिना आदेश पर अमल करना संभव है? मैं आदेश में निष्पादित आदेश को निष्पादित करने का प्रयास करता हूं लेकिन आदेश निष्पादित नहीं होता है। ** आप वर्तमान में इसका उपयोग नहीं कर रहे हैं, इसलिए यह प्रश्न, बहुत अधिक समझ में नहीं आता है। कृपया अपने उपयोगकर्ता का पक्ष करें और कमांड प्रॉम्प्ट को दृश्यमान होने दें, ताकि वे जान सकें कि क्या हो रहा है। –

+1

आप 'वर्ब' नहीं चाहते हैं। इसका मतलब यह नहीं है कि आप क्या सोचते हैं इसका मतलब है। मुझे लगता है। –

+0

@Ramhound procStartInfo.Arguments = "/ env/user:" + "प्रशासक" + "cmd" + ** कमांड **; – purvang

उत्तर

1

आप प्रक्रिया ऑब्जेक्ट को तर्क के साथ क्यों शुरू कर रहे हैं और बाद में उन तर्कों को ओवरराइड कर रहे हैं? और बीटीडब्ल्यू: आखिरी बिट जहां आप तर्क सेट करते हैं, आप 'cmd' तक 'कमांड' को जोड़ते हैं, जो अधिक समझ में नहीं आता है और यह कहां विफल हो सकता है (ऐसा लगता है कि आप एक जगह खो रहे हैं)।

इसके अलावा, आप वर्तमान में मानक कमांड लाइन का उपयोग कर रहे हैं, तो आप इसके बजाय the runas tool का उपयोग करना चाहते हैं। आप कमांड लाइन से रनस को भी कॉल कर सकते हैं।

इसके अलावा, आप कमांड लाइन से 'कमांड' क्यों चला रहे हैं? इसे सीधे प्रक्रिया से क्यों शुरू नहीं करें। वहां और वहां दिए गए व्यवस्थापक विशेषाधिकारों के साथ प्रारंभ करें? यहाँ स्यूडोकोड का एक सा है:

Process p = Process.Start(new ProcessStartInfo() 
{ 
    FileName = <your executable>, 
    Arguments = <any arguments>, 
    UserName = "Administrator", 
    Password = <password>, 
    UseShellExecute = false, 
    WorkingDirectory = <directory of your executable> 
}); 
+0

विचार के लिए धन्यवाद लेकिन मुझे नहीं पता कि प्रक्रिया के दौरान व्यवस्थापक विशेषाधिकार कैसे देना है .start.can आप कुछ नमूना कोड या उदाहरण देते हैं? – purvang

+0

ने कुछ छद्म कोड – mtijn

5

रूप @mtijn कहा कि तुम एक बहुत है कि आप भी बाद में अधिभावी रहे हो रहा है। आपको यह सुनिश्चित करने की भी आवश्यकता है कि आप चीजों से बच रहे हैं। ,

dir c:\ 

पहले अगर आप सिर्फ एक खिड़की अभी खुले और बंद पॉप जाएगा क्योंकि खिड़की खुली रखने के लिए कुछ भी नहीं Process.Start() के माध्यम से इस आदेश को दौड़ा:

मान लें कि आप निम्न आदेश उठाया चलाना चाहते हैं । यह आदेश और निकास को संसाधित करता है। खिड़की खुला रखने के लिए हम अलग कमांड विंडो में आदेश लपेट और /K स्विच का उपयोग यह चालू रखने के लिए कर सकते हैं:

cmd /K "dir c:\" 

कि आदेश ऊंचा हम runas.exe उपयोग कर सकते हैं बस के रूप में आप सिवाय इसके कि हम से बचने के लिए की जरूरत थे चलाने के लिए चीजें थोड़ा और। सहायता दस्तावेज़ों के अनुसार (runas /?) हम आदेश में किसी भी उद्धरण को runas पर बैकस्लैश से बचने की आवश्यकता है। दुर्भाग्यवश उपरोक्त आदेश के साथ ऐसा करने से हमें एक डबल बैकस्लैश मिलता है जो cmd पार्सर को भ्रमित करता है ताकि उसे भी बचने की आवश्यकता हो। अंत में

cmd /K \"dir c:\\\" 

, वाक्य रचना कि आपके द्वारा दी हम एक runas आदेश में सब कुछ लपेट और उद्धरण का एक और सेट में हमारे उपरोक्त आदेश संलग्न कर सकते हैं का उपयोग कर:: तो उपरोक्त आदेश जा रहा है खत्म हो जाएगा

runas /env /user:Administrator "cmd /K \"dir c:\\\"" 

कमांड प्रॉम्प्ट से उपरोक्त आदेश चलाएं ताकि यह सुनिश्चित किया जा सके कि यह अपेक्षित काम कर रहा है।

को देखते हुए सभी कि अंतिम कोड आसान हो जाता है इकट्ठा करने के लिए:

 //Assuming that we want to run the following command: 
     //dir c:\ 

     //The command that we want to run 
     string subCommand = @"dir"; 

     //The arguments to the command that we want to run 
     string subCommandArgs = @"c:\"; 

     //I am wrapping everything in a CMD /K command so that I can see the output and so that it stays up after executing 
     //Note: arguments in the sub command need to have their backslashes escaped which is taken care of below 
     string subCommandFinal = @"cmd /K \""" + subCommand.Replace(@"\", @"\\") + " " + subCommandArgs.Replace(@"\", @"\\") + @"\"""; 

     //Run the runas command directly 
     ProcessStartInfo procStartInfo = new ProcessStartInfo("runas.exe"); 
     procStartInfo.UseShellExecute = true; 
     procStartInfo.CreateNoWindow = true; 

     //Create our arguments 
     string finalArgs = @"/env /user:Administrator """ + subCommandFinal + @""""; 
     procStartInfo.Arguments = finalArgs; 

     //command contains the command to be executed in cmd 
     using (System.Diagnostics.Process proc = new System.Diagnostics.Process()) 
     { 
      proc.StartInfo = procStartInfo; 
      proc.Start(); 
     } 
+0

के साथ उत्तर अपडेट किया है, मैंने cmd runas/env/user में सुझाए गए निम्न आदेश को चलाया है: व्यवस्थापक "cmd/k \" dir c: \\\ "" यह पासवर्ड पूछता है भले ही मैं पासवर्ड दर्ज करता हूं यह नीचे दिया गया आउटपुट देता है cmd/k "dir c: \" – purvang

+0

चलाने में असमर्थ क्या आपने 'रनस/एनवी/उपयोगकर्ता: प्रशासक "cmd/K \" dir c: \\\ "" 'या' cmd runas/env चलाया/उपयोगकर्ता: प्रशासक "cmd/k \" dir c: \\\ "" '? सबसे पहले आपको क्या चलाना चाहिए था। –

+0

मैं इसे रनस/एनवी/उपयोगकर्ता के रूप में चलाता हूं: व्यवस्थापक "cmd/k \" dir c: \\\ "" लेकिन यह त्रुटि निम्नानुसार देता है cmd/k "dir c: \" – purvang

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

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