2010-03-26 7 views
13

मेरे पास एक स्वयंसेवी डब्ल्यूसीएफ सेवा एप्लिकेशन है जिसे मैं एक एमएसआई इंस्टॉलर पैकेज द्वारा तैनात करना चाहता हूं। endpoint स्थापना मैं या तो व्यवस्थापक के रूप में कार्यक्रम चलाने के लिए या करने के लिए netsh साथ http सेटिंग को संपादित करने के लिए है के बाद खिड़कियों के तहत 2008 परियोजना प्रारंभ करेंगे करने के लिए http बंदरगाह 8888. का उपयोग करता है आदेश में:डब्ल्यूसीएफ सेल्फहोस्टेड सेवा, इंस्टॉलर क्लास और नेटस्

"netsh http add urlacl url=http://+:8888/ user=\Everyone" 

मैं http संपादित करना चाहते हैं मेरे इंस्टॉलर वर्ग से सेटिंग्स। इसलिए मैं विधि स्थापित करें() से निम्न विधि कॉल:

public void ModifyHttpSettings() 
    { 
     string parameter = @"http add urlacl url=http://+:8888/ user=\Everyone"; 

     System.Diagnostics.ProcessStartInfo psi = 
      new System.Diagnostics.ProcessStartInfo("netsh", parameter); 

     psi.Verb = "runas"; 
     psi.RedirectStandardOutput = false; 
     psi.CreateNoWindow = true; 
     psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
     psi.UseShellExecute = false; 
     System.Diagnostics.Process.Start(psi); 
    } 

इस विधि स्थानीयकृत संस्करण के लिए नहीं खिड़कियों के अंग्रेज़ी संस्करण के लिए काम करेंगे, लेकिन (समूह हर कोई स्थानीयकृत संस्करण में अलग-अलग नाम है)। मैंने कम से कम मौजूदा लॉग ऑन उपयोगकर्ता के लिए एक्सेस की अनुमति देने के लिए Environment.UserName का उपयोग करने का भी प्रयास किया है। लेकिन यह भी काम नहीं करता है, क्योंकि इंस्टॉलर क्लास एमएसआई सेवा द्वारा चलाया जाता है जो उपयोगकर्ता सिस्टम के तहत चलता है। इसलिए Enviroment.UserName प्रणाली लौटाता है और यह वही नहीं है जो मैं चाहता हूं।

क्या एमएसआई इंस्टॉलर क्लास से सभी सेल्फहोस्टेड डब्ल्यूसीएफ सेवा में सभी (या कम से कम लॉग ऑन के लिए) उपयोगकर्ता तक पहुंच प्रदान करने का कोई तरीका है?

उत्तर

24

एक समाधान करने के लिए मेरे aproach:

public void ModifyHttpSettings() 
    { 
     string everyone = new System.Security.Principal.SecurityIdentifier(
      "S-1-1-0").Translate(typeof(System.Security.Principal.NTAccount)).ToString(); 

     string parameter = @"http add urlacl url=http://+:8888/ user=\" + everyone; 

     ProcessStartInfo psi = new ProcessStartInfo("netsh", parameter); 

     psi.Verb = "runas"; 
     psi.RedirectStandardOutput = false; 
     psi.CreateNoWindow = true; 
     psi.WindowStyle = ProcessWindowStyle.Hidden; 
     psi.UseShellExecute = false; 
     Process.Start(psi); 
    } 

सिड "S-1-1-0" एक जाने माने सिड है और "सभी" खाते के लिए खड़ा है। विंडोज़ के सभी स्थानीयकरण के लिए एसआईडी समान है। SecurityIdentifier क्लास का विधि अनुवाद प्रत्येक खाते का स्थानीयकृत नाम देता है।

+0

धन्यवाद आदमी, आपने अपना समय – Butsaty

+0

@kevinc बचाया है यदि आप उपयोगकर्ता = \ का जिक्र कर रहे हैं, तो वह @ वर्बैटिम स्ट्रिंग बनाने के कारण नहीं है। – Eternal21

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