2010-08-15 13 views
6

के साथ भी इनकार किया गया है।प्रोसेस.किल() विंडोज 7 32 बिट्स में भी प्रशासक विशेषाधिकारों

मुझे एक अजीब समस्या का सामना करना पड़ रहा है। मेरे आवेदन में एक आसान तरीका है कि यदि आईई एक राज्य में प्रवेश करता है तो यह अनुत्तरदायी हो जाता है कि इस विधि को सभी आईई प्रक्रियाओं को बंद कर दिया गया है और फिर एप्लिकेशन आईई के साथ अपने काम को पुनरारंभ करता है।

विधि कोड:

foreach (System.Diagnostics.Process exe in System.Diagnostics.Process.GetProcesses()) 
{ 
    if (exe.ProcessName.StartsWith("iexplore")) 
      exe.Kill(); 
} 

यहां तक ​​कि व्यवस्थापक विशेषाधिकार आवेदन के साथ अपने आवेदन डिबगिंग कभी कभी सफलतापूर्वक इस विधि से चलाता है और कुछ अन्य समय मैं त्रुटि Access Denied भी प्रशासक के रूप में चलाने के लिए।

मैंने अपनी खुद की मेनिफेस्ट फ़ाइल को भी कोड किया है, इस एप्लिकेशन को प्रशासक अधिकारों के साथ निष्पादित करने की आवश्यकता को निर्दिष्ट करते हुए, जो मुझे लगता है कि मुझे यह सही मिला है।

प्रकट कोड:

<?xml version="1.0" encoding="utf-8"?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity version="1.0.0.0" name="Demo.app"/> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
    </application> 
    </compatibility> 
</asmv1:assembly> 

किसी को भी करने से पहले इस एक ही मुद्दा था? मैं इस अजीब समस्या को कैसे ठीक कर सकता हूं।

धन्यवाद

उत्तर

9

को देखते हुए आप कहते हैं कि आप हमेशा प्रशासनिक विशेषाधिकार के अधिकारी जब आप इस विधि कॉल करने का प्रयास है, तो निम्न की व्याख्या करता है तुम क्यों रुक-रुक कर मुद्दे हैं:

System.Diagnostics.Process.Kill:

यदि प्रक्रिया वर्तमान में समाप्त होने पर Kill विधि को कॉल किया गया है, तोएक्सेस अस्वीकृत के लिएफेंक दिया गया है।

आप जल्दी से मारा गया है 'नष्ट' + 'ठीक है' दो बार, प्रक्रिया एक्सप्लोरर में एक प्रविष्टि पर, आपको पता चल जाएगा कि मैं क्या बारे में बात कर रहा हूँ।

+0

मारे जाने के लिए आप सही निश्चित रूप से कर रहे हैं। 2 घंटे के परीक्षण के बाद, वही समस्या फिर से नहीं हुई है। धन्यवाद। –

5

क्या आपने अपना कोड एक प्रयास/पकड़ ब्लॉक में लपेट लिया था ताकि यह देखने के लिए कि कोई अपवाद फेंक दिया गया है या नहीं? यदि नहीं,

try 
{    
    foreach (System.Diagnostics.Process exe in System.Diagnostics.Process.GetProcesses()) 
    { 
     if (exe.ProcessName.StartsWith("iexplore")) 
      exe.Kill(); 
    } 
} 

catch (Win32Exception e) 
{ 
    Console.WriteLine("The process is terminating or could not be terminated."); 
} 

catch (InvalidOperationException e) 
{ 
    Console.Writeline("The process has already exited."); 
} 

catch (Exception e) // some other exception 
{ 
    Console.WriteLine("{0} Exception caught.", e); 
} 
+1

धन्यवाद। विशेष रूप से कोशिश करने और पकड़ने के लिए .. मुझे नहीं पता था कि मैं एक से अधिक पकड़ सकता हूं .. मुझे मूर्खतापूर्ण। –

1

यह इंटरनेट एक्सप्लोरर का एक प्रश्न है, यह एक सत्र के लिए कई प्रक्रियाओं को शुरू करता है। उनमें से एक को मारना उन सभी को बाहर निकलने का कारण बन सकता है। आप शायद "प्रक्रिया समाप्त हो गई है" अपवाद देखते हैं। इस के बजाय जैसे कि यह कार्य करें:

 foreach (var ie in Process.GetProcessesByName("iexplore")) { 
      try { 
       ie.Kill(); 
      } 
      catch {} 
     } 
+0

एनी ने जवाब दिया जब मैंने क्या किया। धन्यवाद। –

0

आप इसे मारने के लिए "foreach" उपयोग नहीं करना चाहिए, और दो को मारने के बीच, आप देरी की जरूरत के लिए प्रक्रिया पूरी तरह से

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