2011-10-03 12 views
6

मैंने अपनी परियोजना में App.Config जोड़ा है। मेरे पास एक इंस्टॉलर क्लास (ProjectInstaller.cs) है जिसे App.config से मान पढ़ने की आवश्यकता है। मैं चाबियाँ प्रदान कर रहा हूं।विंडोज सेवा इंस्टॉलर App.Config फ़ाइल नहीं पढ़ रहा है

ConfigurationManager.AppSettings["CONFIG_FILE"] 

मैं कोड, जब इंस्टालर कक्षा में लागू ऊपर के अनुसार शून्य मान हो रही है: नीचे नमूना कोड है। लेकिन App.Config फ़ाइल में उपरोक्त कुंजी के लिए मान मौजूद है।

+0

देखें http://stackoverflow.com/questions/379276/windows-service-cant-access-app-config-from-within-my-installers-constructor क्या हो रहा है और सर्वोत्तम सुधार - आप नहीं कर सकते एक इंस्टॉलर से सीधे app.config के साथ काम करें क्योंकि आपका एप्लिकेशन वास्तव में अभी तक नहीं चल रहा है। इसके बजाय, यह चल रहा है 'installutil' है। ध्यान दें, वैसे, जैसा कि आप एक प्रश्न लिख रहे हैं, यह साइट संभावित उत्तरों सुझाएगी - उन्हें पढ़ें! –

उत्तर

3

गूगल में मदद करता है: http://social.msdn.microsoft.com/Forums/ar/winformssetup/thread/896e110e-692d-4934-b120-ecc99b01c562

मुद्दा यह है कि अपने संस्थापक नहीं है InstallUtil है अकेले exe और एक app.config कहा जाता है जो कुछ भी आप कल्पना कर अपने संस्थापक चल exe के रूप में डिफ़ॉल्ट रूप से लोड नहीं किया जा के रूप में चल रहा है .exe और यह अंततः फ़ाइल InstallUtil.exe.config जो आपका नहीं है और आप क्या चाहते हैं, तो निम्न पढ़ सकते हैं और लिंक की जांच नहीं है से खोज करेंगे appSettings ...

आप तो इसे InstallUtil के माध्यम से आमंत्रित करें, तो कॉन्फ़िगरेशन फ़ाइल को InstallUtil.exe.config के रूप में परिभाषित किया गया है जो आप नहीं चाहते हैं। आप कॉन्फ़िगरेशन का उपयोग कर कॉन्फ़िगरेशन फ़ाइल मैन्युअल रूप से लोड कर सकते हैं लेकिन यह शायद थोड़ा गन्दा हो जाएगा

यह चाल इंस्टॉलर कक्षाओं के निष्पादन संदर्भ में है। यदि आप इंस्टॉल करें का उपयोग करके अपना ऐप इंस्टॉल करें तो सभी कोड में InstallUtil.exe जैसी ही प्रक्रिया में निष्पादित किए जाएंगे। यदि आपको तैनाती के दौरान इंस्टॉलर क्लास में कुछ डेटा पास करने की आवश्यकता है तो आपको इंस्टॉल पैरामीटर का उपयोग करना चाहिए। वे इंस्टॉल, कमिट, निष्पादन पर्यावरण (installutil, windows instller ...) द्वारा रोलबैक और अनइंस्टॉल विधियों के निष्पादन के दौरान इंस्टॉलर को पास कर दिए जाते हैं। आप इंस्टॉलर क्लास पर InstallContex प्रॉपर्टी का उपयोग कर पैरामीटर तक पहुंच सकते हैं।

वहाँ सेटअप परियोजनाओं और मानकों के बारे में CodeProject पर एक उत्कृष्ट artiicle है: http://www.codeproject.com/dotnet/SetupAndDeployment.asp

चेक बाहर http://msdn2.microsoft.com/en-us/library/system.configuration.install.installcontext.aspx

+0

धन्यवाद डेविड, मैंने अपने ऐप में कुछ महत्वपूर्ण महत्वपूर्ण मूल्यों को परिभाषित किया है। कॉनफिग.मुझे उन्हें पढ़ने की ज़रूरत है। क्या मुझे कोई रास्ता नहीं मिल सका। क्या मुझे भौतिक रूप से भौतिक xml फ़ाइल बनाने की आवश्यकता है। –

+0

जैसा कि मैंने अपने उत्तर में लिखा था, कृपया इसे पढ़ें: http://www.codeproject.com/KB/install/SetupAndDeployment.aspx –

0

मेरे लिए सबसे आसान समाधान InstallUtil.exe.config फ़ाइल बनाने के लिए था, और इसे एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल से सामग्री के साथ भरें। सेवा इंस्टॉलर सफलतापूर्वक इस कॉन्फ़िगरेशन फ़ाइल से पढ़ा है।

मैं में वर्णित निम्न चरणों के द्वारा मेरी सेवा बनाया: Host a WCF Service in a Managed Windows Service

14

प्रयास करें:

public string GetServiceNameAppConfig(string serviceName) 
{ 
    var config = ConfigurationManager.OpenExeConfiguration(Assembly.GetAssembly(typeof(MyServiceInstaller)).Location); 
    return config.AppSettings.Settings[serviceName].Value; 
} 
+0

यह समाधान काम करता है, और सेटअप प्रोजेक्ट की आवश्यकता नहीं है। धन्यवाद। –

+0

यह काम करता है! धन्यवाद – Zeeshan

1

डेविड Piras बहुत अच्छी तरह से, तुम क्यों अपने app.config उपयोग नहीं कर सकते और अपने मूल्यों को पारित करने का सुझाव समझाया पैरामीटर के रूप में।

भाग 1:: Using Parameters with InstallUtil

भाग 2: Configuring Windows Services with Parameters from InstallUtil

यह बताते हैं

मैं कैसे installutil.exe लिए पैरामीटर भेजने और उन्हें serviceInstaller या projectInstaller में उपयोग करने के लिए पर एक अच्छी और उपयोगी लेख मिला बहुत जल्द ही तर्क कैसे पारित करें और उन्हें कैसे पढ़ा जाए।

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