2008-12-08 25 views
7

मुझे ASP.NET 2.0 में प्रतिरूपित संदर्भ में प्रक्रिया शुरू करने में समस्या है।प्रक्रिया शुरू करें और प्रतिरूपण

मैं अपने वेब सेवा कोड में नई प्रक्रिया शुरू कर रहा हूं। 5.1 IIS, नेट 2,0

[WebMethod] 
public string HelloWorld() 
{ 
    string path = @"C:\KB\GetWindowUser.exe"; 
    ProcessStartInfo startInfo = new ProcessStartInfo(); 
    startInfo.WorkingDirectory = Path.GetDirectoryName(path); 
    startInfo.FileName = path; 
    startInfo.UseShellExecute = false; 
    startInfo.CreateNoWindow = true; 
    startInfo.ErrorDialog = false; 
    startInfo.RedirectStandardOutput = true; 
    startInfo.RedirectStandardError = true; 
    Process docCreateProcess = Process.Start(startInfo); 

    string errors = docCreateProcess.StandardError.ReadToEnd(); 
    string output = docCreateProcess.StandardOutput.ReadToEnd(); 
} 

"C: \ KB \ GetWindowUser.exe":

static void Main(string[] args) 
{ 
    Console.WriteLine("Windows: " + WindowsIdentity.GetCurrent().Name); 
} 

जब मैं प्रतिरूपण बिना वेब सेवा का उपयोग, सब कुछ ठीक काम करता है सांत्वना निम्नलिखित कोड युक्त आवेदन है।

जब मैं प्रतिरूपण चालू करते हैं, तो निम्न त्रुटि "त्रुटि" में लिखा है वेब सेवा कोड में चर:

बिना क्रिया के अपवाद: System.Security.SecurityException:। पहुंच अस्वीकृत कर दी \ r \ n \ r \ n पर System.Security.Principal.WindowsIdentity.GetCurrentInternal (TokenAccessLevels वांछित एक्सेस, बूलियन थ्रेड केवल) \ r \ n System.Security.Principal.WindowsIdentity.GetCurrent() \ r \ n ObfuscatedMdc.Program.Main (स्ट्रिंग [] args) पर \ r \ n \ n विफल होने वाली असेंबली का क्षेत्र था: \ r \ n मेरा कंप्यूटर

प्रतिरूपित उपयोगकर्ता स्थानीय व्यवस्थापक है और उसके पास C: \ KB \ GetWindowUser.exe निष्पादन योग्य है।

जब मैं में ProcesStartInfo गुण डोमेन, उपयोगकर्ता और पासवर्ड स्पष्ट रूप से उपयोगकर्ता खिड़की निर्दिष्ट करते हैं, मैं निम्नलिखित गया संदेश: http://img201.imageshack.us/img201/5870/pstartah8.jpg

क्या यह संभव है asp.net से ASPNET की तुलना में अलग साख (IIS 5.1) के साथ प्रक्रिया शुरू करें?

+1

में उल्लेख किया

using (Impersonator person = new Impersonator("domainName", "userName", "password") { // do something requiring special permissions } 

के अंदर अपना कोड लपेटकर कोशिश कर सकते हैं? – Kiquenet

उत्तर

3

आपको जीएसी (या पूर्ण ट्रस्ट में चलाने) में विशेषाधिकार प्राप्त कोड रखना होगा।

जीएसी में कोड को XXX पैरामिशन पर जोर देना चाहिए, जहां XXX आपसे अनुरोध करने की अनुमति है, चाहे प्रतिरूपण हो, हार्डड्राइव तक पहुंच हो या आप क्या हैं।

आपको तुरंत बाद में जोर देना चाहिए।

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

वेब जैसी विधि का खुलासा करना चाहिए।कॉन्फ़िगरेशन फ़ाइल में प्रतिरूपण भी सेट होना चाहिए, या आप NTFS अनुमति समस्याओं के साथ-साथ सीएएस में भी भाग लेंगे।

यहां complete explanation है।

0

आप वास्तव में क्या करने की कोशिश कर रहे हैं? मैं बिल्कुल नहीं देख सकता कि आपके कोड का बिंदु एक अलग निष्पादन योग्य बनाने में क्या है। यह अजीब लग रहा है। शायद यह उन समस्याओं को बताने में मददगार होगा जो आप पहले हल करने की कोशिश कर रहे हैं।

0

ऐसा लगता है कि आप आईआईएस सेवा को सेवा के मुकाबले उच्च विशेषाधिकार वाले उपयोगकर्ता का प्रतिरूपण करने की कोशिश कर रहे हैं (इस मामले में, एक प्रशासक)। विंडोज़ इसे सुरक्षा छेद के रूप में अवरुद्ध करता है, क्योंकि उस बिंदु पर आप मूल रूप से किसी को अपने सिस्टम को लेने के लिए भीख मांग रहे हैं। इस सीमा के आसपास काम करने का एक तरीका हो सकता है, लेकिन ऐसा मत करो - यह आपके लिए अच्छा है।

इसके बजाय, आईआईएस सीमित अनुमति वाले उपयोगकर्ता का प्रतिरूपण करता है, जिसके पास वास्तव में आपके अधिकार हैं। जैसे एक उपयोगकर्ता खाता बनाएं जो केवल उन फ़ोल्डरों का मालिक हो, जिन्हें आप अपनी वेब सेवा लिखना चाहते हैं, या अधिकारों का जो भी संयोजन उचित है। यदि सीमित उपयोगकर्ता का प्रतिरूपण करना है, तो आपको यह त्रुटि कोड नहीं दिखाई देगा, लेकिन फिर भी आपके पास सौम्य निष्पादन योग्य कॉल करने में सक्षम होना चाहिए।

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