2012-12-10 13 views
6

मैं विंडोज फॉर्म के दृश्यों के पीछे **cd..** आदेश कैसे चला सकता हूं? (यानी उपयोगकर्ता इसे नहीं देख सकता)व्यवस्थापक अधिकारों के साथ cmd कमांड चलाना

धन्यवाद।

+0

आप के बजाय सी # में सीधे काम करने चाहिए। – SLaks

+0

यहां आपको उपयोगी जानकारी मिलेगी http://stackoverflow.com/questions/7610727/to-run-cmd-as-administrator-along-with-command – Vlad

उत्तर

8

System.Diagnostics.Process देखें http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

वहाँ भी है इस अतः इस एक ही सटीक सवाल का जवाब:https://stackoverflow.com/a/1469790/25882

उदाहरण:

System.Diagnostics.Process process = new System.Diagnostics.Process(); 
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
startInfo.FileName = "cmd.exe"; 
startInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg"; 
startInfo.Verb = "runas"; 
process.StartInfo = startInfo; 
process.Start(); 
+0

कमांड और/बी तर्क नहीं है या मैं गलत हूं – NathanProgrammer

+0

@ Kid8/b प्रतिलिपि आदेश के लिए एक तर्क है।/सी के दाईं ओर सबकुछ कमांड स्ट्रिंग है। –

+1

यह भी सुनिश्चित करें कि आपने प्रयोग के लिए UseShellExecute को सेट नहीं किया है – kofifus

0

स्निपेट "अदृश्य है "उपयोगकर्ता को, और यह आउटपुट को रीडायरेक्ट करता है ताकि आप इसे किसी भी तरह इस्तेमाल कर सकें (मुझे लगता है कि आपको इसकी आवश्यकता है)।

string output = null; 

try 
{ 
    ProcessStartInfo ps = new ProcessStartInfo("cmd"); 
    ps.Arguments = "/c cd.."; 
    ps.UseShellExecute = false; 

    // Redirects the standard output so it reads internally in out program 
    ps.RedirectStandardOutput = true; 

    // Starts the process 
    using (Process p = Process.Start(ps)) 
    { 
     // Reads the output to a string 
     output = p.StandardOutput.ReadToEnd(); 

     // Waits for the process to exit must come *after* StandardOutput is "empty" 
     // so that we don't deadlock because the intermediate kernel pipe is full. 
     p.WaitForExit(); 
    } 
} 
catch 
{ 
    // manage errors 
} 
finally 
{ 
if(output != null) 
{ 
    // Process your output 
} 
} 
12

आप एक नया System.Diagnostics.ProcessStartInfo जो आपके प्रक्रिया WindowStyle के अलावा है कि जब प्रक्रिया शुरू कर दी है Hidden, Maximized, Minimized या Normal हो सकता है जो उपयोग करने के लिए खिड़की राज्य इंगित करता है में शुरू करने के लिए के लिए आवश्यक जानकारी नहीं है प्रारंभ कर सकते हैं। आपके मामले में, हम इसे Hidden के रूप में सेट करेंगे ताकि प्रक्रिया शुरू की जाएगी जो इनपुट प्राप्त नहीं कर पाएगी और न ही उपयोगकर्ता को आउटपुट दिखाएगी।

उदाहरण

System.Diagnostics.ProcessStartInfo myProcessInfo = new System.Diagnostics.ProcessStartInfo(); //Initializes a new ProcessStartInfo of name myProcessInfo 
myProcessInfo.FileName = Environment.ExpandEnvironmentVariables("%SystemRoot%") + @"\System32\cmd.exe"; //Sets the FileName property of myProcessInfo to %SystemRoot%\System32\cmd.exe where %SystemRoot% is a system variable which is expanded using Environment.ExpandEnvironmentVariables 
myProcessInfo.Arguments = "cd.."; //Sets the arguments to cd.. 
myProcessInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //Sets the WindowStyle of myProcessInfo which indicates the window state to use when the process is started to Hidden 
System.Diagnostics.Process.Start(myProcessInfo); //Starts the process based on myProcessInfo 

स्क्रीनशॉट

निम्नलिखित स्क्रीनशॉट कार्य प्रबंधक एक प्रक्रिया है जो हमारे आवेदन के द्वारा शुरू किया गया था दिखा प्रतिनिधित्व करता है। हालांकि, इसकी खिड़की दिखाई नहीं दे रही है।

The process is running without showing its Window

सूचना: प्रक्रिया शुरू कर दी समाप्त नहीं होगा, भले ही आप अपने आवेदन को बंद करें।

साथ ही, व्यवस्थापक के रूप में एक प्रक्रिया को चलाने के लिए आप इस प्रक्रिया के Verb संपत्ति runas

को जानकारी शुरू निर्धारित कर सकते हैं उदाहरण

System.Diagnostics.ProcessStartInfo myProcessInfo = new System.Diagnostics.ProcessStartInfo(); //Initializes a new ProcessStartInfo of name myProcessInfo 
myProcessInfo.FileName = Environment.ExpandEnvironmentVariables("%SystemRoot%") + @"\System32\cmd.exe"; //Sets the FileName property of myProcessInfo to %SystemRoot%\System32\cmd.exe where %SystemRoot% is a system variable which is expanded using Environment.ExpandEnvironmentVariables 
myProcessInfo.Arguments = "cd.."; //Sets the arguments to cd.. 
myProcessInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //Sets the WindowStyle of myProcessInfo which indicates the window state to use when the process is started to Hidden 
myProcessInfo.Verb = "runas"; //The process should start with elevated permissions 
System.Diagnostics.Process.Start(myProcessInfo); //Starts the process based on myProcessInfo 

सूचना: यदि आप उपयोगकर्ता खाता है, तो नियंत्रण सक्षम है, आपसे कहा जा सकता है कि इस प्रक्रिया को कॉल करने का प्रयास करने वाले एप्लिकेशन को उन्नत अनुमतियों के साथ नहीं चल रहा था, तो पहले प्रक्रिया को उन्नत अनुमतियों से शुरू करने की अनुमति देने के लिए कहा जा सकता है।

यदि आप प्रॉम्प्ट को छोड़ना चाहते हैं, तो मुझे लगता है कि आपको अपने मुख्य एप्लिकेशन को उन्नत अनुमतियों से शुरू करने की अनुमति देनी चाहिए। ऐसा करने के लिए, आप अपने आवेदन के प्रदर्शन में खोल सकते हैं और यह सुनिश्चित करें कि निम्न पंक्ति

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

यह जोड़ा जाता है बस केवल ऊंचा अनुमति के साथ शुरू करने के लिए अपने आवेदन बता देंगे बनाने की आवश्यकता होगी।इसलिए, जब आप एक प्रशासक के रूप में प्रक्रिया को कॉल करते हैं, तो कोई संकेत नहीं होगा क्योंकि एक प्रशासक के तहत प्रक्रिया कॉलर निष्पादित किया जा रहा है।

धन्यवाद,
मैं आप पाते हैं उम्मीद है कि इस उपयोगी :)

+0

तर्कों पर '/ C' को न भूलें – newbieguy

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