2010-08-03 18 views
6

मैं पिड द्वारा प्रक्रिया पथ प्राप्त करने का प्रयास कर रहा हूं लेकिन मुझे Win32Exception (एक्सेस आईडी अस्वीकार कर रहा है) मिल रहा है।प्रक्रिया पथ प्राप्त करते समय एक्सेस अस्वीकार

कोड इस तरह दिखता है:

string path = Process.GetProcessById(pid).MainModule.FileName 

मैं GetModuleFileNameEx साथ OpenProcess उपयोग करने की कोशिश की है, लेकिन OpenProcess 0. मैं भी C# – How to enable SeDebugPrivilege के अनुसार SeDebugPrivilege को सक्षम करने की कोशिश की लौटा रहा है, लेकिन यह मदद नहीं की।

उपर्युक्त कोड अधिकांश प्रक्रियाओं के लिए काम करता है लेकिन SynTPHelper.exe (सिनैप्टिक्स पॉइंटिंग डिवाइस हेल्पर) के लिए त्रुटि फेंकता है एप्लिकेशन मेरे कोड के समान उपयोगकर्ता नाम के तहत चल रहा है। दोनों, मेरा आवेदन और प्रक्रिया 64 बिट में चल रही है।

क्या पथ बिना किसी व्यवस्थापक के रूप में अपना आवेदन चलाने के लिए संभव है?

संपादित

कार्य प्रबंधक भले ही मैं इसे एक प्रशासक के रूप में नहीं चल रहा हूँ 'फ़ाइल खोलने स्थान' करने में सक्षम है।

उत्तर

12

अंत में मैंने इसे हल करने में कामयाब रहे।

private static string GetExecutablePathAboveVista(UIntPtr dwProcessId) 
    { 
     StringBuilder buffer = new StringBuilder(1024); 
     IntPtr hprocess = OpenProcess(ProcessAccessFlags.PROCESS_QUERY_LIMITED_INFORMATION, false, dwProcessId); 
     if (hprocess != IntPtr.Zero) 
     { 
      try 
      { 
       int size = buffer.Capacity; 
       if (QueryFullProcessImageName(hprocess, 0, buff, out size)) 
       { 
        return buffer.ToString(); 
       } 
      } 
      finally 
      { 
       CloseHandle(hprocess); 
      } 
     } 
     return string.Empty; 
    } 
:

QueryFullProcessImageName

यहाँ कोड है कि गैर ऊपर उठाया प्रक्रिया से काम करता है: के रूप में यह पता चला है कि वहाँ Vista में और इस प्रक्रिया पथ और नई प्रक्रिया का उपयोग (PROCESS_QUERY_LIMITED_INFORMATION) प्राप्त करने के लिए ऊपर नया कार्य है

+3

http://www.aboutmycode.com/net-framework/how-to-get-elevated-process-path-in-net/ (जो वही जियोर्गी है?) के लिए बहुत धन्यवाद। सरल प्रतिलिपि/अतीत/सुधार/कुछ नामस्थान जोड़ें और यह काम करता है !!! :) –

+0

@ एंड्रियास: हाँ, यह सिर्फ मेरा ब्लॉग है। – Giorgi

+3

PROCESS_QUERY_LIMITED_INFORMATION = 0x1000; http://msdn.microsoft.com/en-us/library/windows/desktop/ms684880(v=vs.85).aspx – Jason

1

ठीक है, एक्सेस अधिकारों को हटाने के लिए सेवाओं के लिए निश्चित रूप से अनदेखा नहीं किया जाता है ताकि एक व्यवस्थापक भी प्रक्रिया को नहीं खोल सके। ऐसा करने के लिए एक सेवा के पास पर्याप्त विशेषाधिकार हैं, ऑडीओडीजी.एक्सई जैसे डीआरएम घटक आसानी से ऐसा करते हैं। एक माउस पैड सहायक मुझे ऐसे कुछ के रूप में नहीं मारता है जिसके लिए ऐसी सुरक्षा की आवश्यकता होगी। लेकिन क्या हे, किसी को कभी भी माउस पैड सहायक के साथ गड़बड़ करने की आवश्यकता क्यों होगी?

+0

मैं इसके साथ गड़बड़ करने की कोशिश नहीं कर रहा हूं, मैं बस मौजूदा उपयोगकर्ता के तहत चल रहे पथ के साथ प्रक्रियाओं की सूची प्राप्त करना चाहता हूं। समर्थन के लिए – Giorgi

+0

संपर्क सिनैप्टिक्स। क्यों तैयार रहें? सवाल। –

+0

audiodg.exe भी एक संरक्षित प्रक्रिया आईआईआरसी है, इसलिए इसे – Anders

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

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