2009-12-21 11 views
11

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

पर्यावरण। SpecialFolders.AplicationData वर्तमान उपयोगकर्ता एपडाटा फ़ोल्डर देता है, लेकिन मैं विश्वसनीय रूप से उपयोगकर्ता नाम को खोद नहीं सकता।

अधिक मामले बारीकियों:

एक विजुअल स्टूडियो 2008 सेटअप परियोजना कस्टम क्रिया एक इंस्टॉलर वर्ग चलाने के बाद स्थापित है और इस परियोजना में केवल एक ही है का उपयोग करना।

+0

क्या आप कुछ और जानकारी दे सकते हैं? क्या आप एक सेटअप प्रोजेक्ट का उपयोग कर रहे हैं? वाईएक्स पर आधारित बिल्डिंग? क्या आप अपनी कस्टम कार्रवाई को निर्धारित करने के लिए कहां (अनुक्रम, स्थिति) जोड़ सकते हैं? क्या यह स्थगित हो रहा है? तत्काल? –

+0

मैंने प्रश्न के लिए थोड़ा और विस्तार जोड़ा है। मैंने वाईएक्स को छुआ नहीं है। बहुत यकीन है कि यह तत्काल है। – Septih

उत्तर

3

असल में, आप नहीं कर सकते।

UAC in MSI Notes: Credential Prompt and Permissions बताते हैं इस में से कुछ और अधिक विस्तार है, लेकिन प्रभावी ढंग से एक बार आप अपने क्रेडेंशियल्स वर्तमान में उपयोगकर्ता में लॉग इन किया है देखने के संस्थापक बिंदु से प्रणाली ऊपर उठाया गया है (यदि आप अनेक लोगों को एक पर चल रहे अनुप्रयोगों में लॉग इन और हो सकता है मशीन, इसलिए आपको भौतिक मशीन के सामने बैठे की बजाय प्रक्रिया के संदर्भ से खुद को सोचना होगा)।

2

WindowsIdentity.GetCurrent() का उपयोग करें। सिस्टम से सुरक्षा। सुरक्षा। प्रिंसिपल नेमस्पेस। इसमें डोमेन भाग भी शामिल होगा, इसलिए यदि आपको इसकी आवश्यकता नहीं है तो इसके अंत में एक विभाजन जोड़ें। WindowsIdentity.GetCurrent()। Name.Split ('') [1]।

using System.Security.Principal; 

this.nametext = WindowsIdentity.GetCurrent().Name.Split('')[1]; 
+0

अन्य उत्तर भी थे जिन्होंने यह भी सुझाव दिया, लेकिन ऐसा लगता है कि हटा दिया गया है। यह विस्टा में उपयोगकर्ता नाम वापस नहीं करता है, यह अभी भी सिस्टम – Septih

+0

लौटाता है इस पोस्ट को देखें। http://stackoverflow.com/questions/400872/c-active-directory-check-username-password। यह मान्य करने के बारे में अधिक है लेकिन यह उपयोगी हो सकता है। –

2

सबसे पहले, सुनिश्चित करें कि आप बंद करने Impersonate bit सेट किया हुआ है। Here is how

दुर्भाग्य से, वहाँ नहीं के लिए एक रास्ता सीधे विजुअल स्टूडियो IDE में सेटअप परियोजना के लिए यूआई में एक कस्टम कार्रवाई के लिए इस ध्वज सेट है। विजुअल स्टूडियो 2005 में, आप पोस्ट-बिल्ड चरण का उपयोग कर सकते हैं जो एमएसआई को बिट को इस blog post में वर्णित पहले रणनीति का उपयोग करके संशोधित करने के लिए संशोधित करता है।

दूसरा, मैं तुम्हें विस्टा चल रहे हैं क्योंकि लोग और Vista के साथ इस समस्या है लगता है किसी को MSDN पर इस प्रश्न पूछा और उनके समाधान ब्लॉग पोस्ट का अनुसरण करना था here जुड़ा हुआ मान।

UAC in MSI Notes: The NoImpersonate Bit Mistake पर रॉबर्ट फ्लेमिंग का ब्लॉग पोस्ट इन मुद्दों में कुछ अंतर्दृष्टि भी देता है।

+0

ठीक है, मेरे पास पहले से ही प्रतिरूपण बिट बंद है। मैंने ब्लॉग पर देखा जिसने एमएसडीएन प्रश्न का उत्तर दिया और मैनिफेस्ट समाधान की कोशिश की, लेकिन ऐसा लगता है कि ऐसा कुछ भी नहीं बदला है। मैंने मूल रूप से सिर्फ ब्लॉग से मैनिफेस्ट की प्रतिलिपि बनाई है और इसे setup.exe.manifest – Septih

+0

के रूप में सहेजा है, लेकिन मुझे अब और जानकारी नहीं है –

2

मैंने कभी भी वीएस सेटअप परियोजनाओं को छुआ नहीं है (हालांकि वाईएक्स के साथ खेला गया है और इसकी सिफारिश कर सकते हैं)। आपकी समस्या को देखते हुए ऐसा लगता है कि आपका सीए स्थगित हो जाता है (और ऊंचे विशेषाधिकारों के साथ)।

वी.एस. सेटअप परियोजनाओं के लिए शुद्ध मैं एक लंबा लेख 1 कि इस पैरा निहित में आए सर्च कर रहे हैं ("आस्थगित" के लिए खोज):

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

1: http://www.simple-talk.com/dotnet/visual-studio/visual-studio-setup---projects-and-custom-actions/

7

आप पर्यावरण चर से कुछ जानकारी मिल सकती है। मैं

पर्यावरण का उपयोग कर रहा हूं। GETEnvironmentVariable ("USERNAME"); वर्तमान उपयोगकर्ता नाम प्राप्त करने के लिए

+0

यह उत्तर मेरे लिए काम करता है - यह लॉग-इन उपयोगकर्ता देता है और ऊंचे इंस्टॉलर उपयोगकर्ता को भीतर से नहीं देता कस्टम कार्रवाई। –

+0

मैं इस विधि का उपयोग कर डोमेन भी प्राप्त करता हूं: पर्यावरण। GETEnvironmentVariable ("USERDOMAIN") + "\\" + Environment.GetEnvironmentVariable ("USERNAME") –

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