2009-11-16 11 views
5

मेरी सी # अनुप्रयोग में, मैं प्रोग्राम के रूप में एक Oracle ग्राहक अगर एक, मौजूद नहीं है जो PATH प्रणाली वातावरण चर करने के लिए एक निर्देशिका जोड़ने की आवश्यकता है स्थापित करने हूँ नहीं पहचानता है। यह सब ठीक काम करता है, लेकिन जब तक उपयोगकर्ता विंडोज़ में लॉग इन नहीं करता है, या रीबूट करता है तब तक यह प्रभावी नहीं होता है। मैं अपने ऐप को इस चरण के बिना नए पाथ var को पहचानने और उपयोग करने के लिए कैसे प्राप्त कर सकता हूं? यहां तक ​​कि मेरे ऐप को पुनरारंभ करना भी उपयोगकर्ता को लॉग इन/इन करने की आवश्यकता से बेहतर होगा।सी # /। नेट अनुप्रयोग पर्यावरण वार बदलें (पथ)

माना जाता है, अन्य प्रक्रियाओं के लिए यह परिवर्तन प्रसारण काम करना चाहिए। यहाँ है कि मैं क्या कोई सफलता के साथ, की कोशिश की है है:

using System.Runtime.InteropServices; 

    private const int HWND_BROADCAST = 0xffff; 
    private const int WM_WININICHANGE = 0x001a, WM_SETTINGCHANGE = WM_WININICHANGE, INI_INTL = 1; 
    [DllImport("user32.dll")] 
    private static extern int SendMessageTimeoutA(int hWnd, uint wMsg, uint wParam, string lParam, int fuFlags, int uTimeout, int lpdwResult); 

    int rtnVal = 0; 
    SendMessageTimeoutA(HWND_BROADCAST, WM_SETTINGCHANGE, 0, "Environment", 2, 5000, rtnVal); 

मैं अगर तुम बंद करो और प्रश्न में प्रक्रिया को पुनः प्रारंभ बताया गया है, यह परिवर्तन के इन प्रकार के लेने चाहिए, लेकिन मेरे ऐप को पुन: प्रारंभ नहीं करता है यह। मुझे लगता है कि यह ओरेकल मुद्दा हो सकता है, कि ओरेकल के बारे में कुछ बदलाव के लिए लॉगिन की आवश्यकता है, मुझे यकीन नहीं है। अग्रिम में धन्यवाद।

+0

अपने अनुप्रयोग को पुनः प्रारंभ करने के लिए नए पथ चर लेने के लिए पर्याप्त होना चाहिए। आप अपने इंस्टॉलर को कैसे लॉन्च कर रहे हैं? – ChrisF

+0

यह एक क्लिकऑन परिनियोजन है, शायद यह मुद्दा है? मैं शॉर्टकट से लॉन्च कर रहा हूं जो इंस्टॉल पर स्टार्ट मेनू में डाल दिया जाता है। –

उत्तर

1

Environment.GetEnvironmentVariable("MYVAR", EnvironmentVariableTarget.Machine) काम नहीं करता है?

मेरे ऐप तो ऊंचा चल रहा है मैं

Environment.SetEnvironmentVariable("MYVAR", "cool", EnvironmentVariableTarget.Machine); 

//do some other stuff... 

Console.WriteLine(Environment.GetEnvironmentVariable("MYVAR", EnvironmentVariableTarget.Machine)); 

C:\TestApp>>TestApp.exe 
cool 

मैं अगर यह आपके एप्लिकेशन हो रही करने के लिए यह होना चाहिए दूसरे चल रहे प्रक्रियाओं के लिए काम करेगा, लेकिन पता नहीं है/कर सकते हैं

+0

हाँ, यह काम करता है। मैं पैथ चर के लिए जो भी लिखता हूं, उसके बाद मेरे ऐप द्वारा सही ढंग से पढ़ा जाता है। –

+0

बस स्पष्ट करने के लिए, मेरे एप्लिकेशन को अभी भी काम नहीं करता है, क्योंकि यह वास्तव में ओरेकल ग्राहक मुझे लगता है कि समझते हैं और नए पथ वर का उपयोग करने की जरूरत है का उपयोग कर रहा है। किसी कारण से, यह नहीं हो रहा है, यहां तक ​​कि मेरे ऐप को रोकने और फिर से लॉन्च करने के बाद भी। इसके लिए विंडोज लॉगआउट/लॉगिन की आवश्यकता है। –

+1

क्या आपका ओरेकल क्लाइंट सेवा या स्टैंडअलोन एक्सई के रूप में चल रहा है? यह किस उपयोगकर्ता के तहत चल रहा है? (सिस्टम, एनटी अथॉरिटी, उपयोगकर्ता में लॉग इन आदि) यदि यह एक सेवा है तो यह लागू हो सकती है: http://support.microsoft.com/kb/821761 – nick

1

आपकी समस्या की स्थापना केवल कुछ ऐप्स ही उस संदेश (जैसे एक्सप्लोरर) के लिए सुनते हैं, इसलिए इसका उपयोग आपके एप्लिकेशन द्वारा नहीं किया जाएगा। चूंकि पर्यावरण को आम तौर पर विरासत में मिलाया जाता है, फिर भी अपने ऐप को अपने आप से पुनरारंभ करना मदद नहीं करेगा क्योंकि यह आपके वर्तमान पर्यावरण ब्लॉक को प्राप्त करेगा। यदि उपयोगकर्ता स्टार्ट मेनू से पुनरारंभ होता है तो यह काम करेगा (मान लें कि WM_SETTINGCHANGE प्रसारण किया गया है)।

आप सबसे अच्छा Environment.GetEnvironmentVariable उपयोग कर रहे हैं रजिस्ट्री से वर्तमान मूल्य बाहर पढ़ सकते हैं और वर्तमान वातावरण इसे वापस मर्ज आप में करने के लिए। मूल रूप से

Environment.SetEnvironmentVariable("PATH", Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine) + ";" + (Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.User)));

+0

विचार के लिए धन्यवाद। मैंने बिना किसी सफलता के मशीन मशीन लक्ष्य पाथ और प्रोसेस लक्ष्य पाथ वैर दोनों को आपके उदाहरण के समान सेट करने की कोशिश की। वैसे, मैं ऐप के भीतर से पुनरारंभ नहीं कर रहा हूं - मैं हमेशा स्टार्ट मेनू से मैन्युअल रूप से पुनरारंभ कर रहा हूं, फिर से सफलता के बिना। –

0

हमारी प्रोजेक्ट में हमने तत्काल क्लाइंट संग्रह से "install.bat" के उपयोग के साथ ओरेकल इंस्टेंट क्लाइंट को सेटअप किया है। उदाहरण के लिए:

odp.net1x install.bat% 1 नाम

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