8

मैं चाहता हूं कि मेरा एमवीसी 3 वेब एप्लिकेशन% APPDATA% (उदा। C:\Users\MyUsername\AppData\Roaming विंडोज 7 पर) तक पहुंचने के लिए चाहता है क्योंकि मैं वहां कॉन्फ़िगरेशन फ़ाइलों को संग्रहीत करता हूं। इसलिए मैंने उपयोगकर्ता "MyUsername" की पहचान के साथ आईआईएस में एक एप्लिकेशन पूल बनाया, खाते के साथ लॉग इन करके उस उपयोगकर्ता की प्रोफ़ाइल बनाई, और "लोड उपयोगकर्ता प्रोफ़ाइल" विकल्प को चालू किया (वैसे भी डिफ़ॉल्ट रूप से सही था)। प्रतिरूपण बंद कर दिया गया है।आईआईएस 7.5 एप्लिकेशन पूल कस्टम उपयोगकर्ता के लिए गलत% APPDATA% का उपयोग करता है पहचान

appdataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

c:\windows\system32\inetsrv बजाय C:\Users\MyUsername\AppData\Roaming ले कर जाता है:

अब मैं समस्या यह है कि% APPDATA% (सी में #) है।

अद्यतन: अधिक वास्तव में, इसके बाद के संस्करण सी # कोड एक खाली स्ट्रिंग देता है, ताकि Path.GetFullPath(Path.Combine(appdataDir, "MyAppName")) अपने आवेदन नाम के वर्तमान पथ पहले जोड़ता, c:\windows\system32\inetsrv\MyAppName हो जाती है।

मैं मैं पर एक Windows Server 2008 R2 उसी वेब अनुप्रयोग के साथ पहले इस काम किया जाता है, और अब मैं अपने Windows 7 पर आईआईएस का एक ही मुख्य संस्करण 7.5 के साथ इस समस्या हो रही है
मैं इस्तेमाल किया पहले की तरह ही प्रक्रिया: एक नया उपयोगकर्ता बनाया गया, उस उपयोगकर्ता के रूप में प्रोफ़ाइल और APPDATA निर्देशिका बनाने के लिए लॉग इन किया गया, फिर इस पहचान के साथ एप्लिकेशन पूल जोड़ा और आखिर में इस पूल में वेब एप्लिकेशन जोड़ा।

कोई विचार?

+0

लिया अपने आवेदन पूल क्लासिक या एकीकृत मोड के रूप में विन्यस्त है? – Kev

+0

@ केवी: एकीकृत मोड। – AndiDog

+0

मुझे एक ही समस्या है। विशेष रूप से अजीब बात यह है कि पर्यावरण के लिए पथ। SpecialFolder.UserProfile ठीक काम करता है, और यदि मैं वहां से ऐपडेटा फ़ोल्डर का पथ बनाता हूं, तो यह काम करता है। – Jason

उत्तर

0

मुझे एक ही समस्या का सामना करना पड़ रहा है। क्या आपने विजुअल स्टूडियो 11 बीटा स्थापित किया है? मैंने हाल ही में किया है, और मैंने अपने कोड के साथ उस काम के लिए 4.0 संगत। डीएलएस में कुछ अंतर देखा है। मैं अभी भी निश्चित रूप से समस्या को ट्रैक करने की कोशिश कर रहा हूं, लेकिन इससे पहले मुझे यह समस्या नहीं थी।

संपादित करें:

4.0 और GetFolderPath (और संबंधित) के लिए 4.5 से decompiled स्रोतों की तुलना के बाद, वहाँ मतभेद हैं। चाहे वे समस्या का स्रोत हों ... मुझे अभी तक यकीन नहीं है।

संपादित करें 2: यहां प्रासंगिक परिवर्तन हैं। मैं यह देखने के लिए दोनों काम कर रहा हूं कि मुझे अलग-अलग परिणाम मिलते हैं या नहीं। [कोड निकाल]

संपादित करें 3:

मैं अब SHGetFolderPath सीधे कॉल, जो है क्या .नेट फ्रेमवर्क वैसे भी कर रही है समाप्त होता है, की कोशिश की है। यह E_ACCESSDENIED (-2147024891/0x80070005) देता है। मुझे नहीं पता कि क्या बदल गया है, जहां मुझे कुछ विशिष्ट मामलों में यह मिल रहा है, लेकिन दूसरों में नहीं।

संपादित 4:

चूंकि आप एक खाली स्ट्रिंग हो रही है, तो आप SHGetFolderPath उपयोग करें ताकि आप HRESULT प्राप्त कर सकते हैं और कम से कम पता है कि वास्तव में क्या हो रहा है अपने कोड स्विच कर सकते हैं।

void Main() { 
    Console.WriteLine(GetFolderPath(Environment.SpecialFolder.ApplicationData)); 
} 

[System.Runtime.InteropServices.DllImport("shell32.dll")] 
static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, uint dwFlags, StringBuilder pszPath); 

private string GetFolderPath(Environment.SpecialFolder folder) { 
    var path = new StringBuilder(260); 
    var hresult = SHGetFolderPath(IntPtr.Zero, (int) folder, IntPtr.Zero, 0, path); 
    Console.WriteLine(hresult.ToString("X")); 

    return ((object) path).ToString(); 
} 
+1

नहीं, मेरे पास विजुअल स्टूडियो 2010 स्थापित है, और कोई अन्य बीटा नहीं है। वहां कौन से मतभेद हैं? – AndiDog

+0

मुझे 0x80070005 (E_ACCESSDENIED) भी मिल रहा है। अधिक जांच करने की कोशिश करेंगे। – AndiDog

0

समस्या आपकी आईआईएस सेटिंग्स के साथ है। उत्तर यहां है: Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) returns String.Empty

+0

मेरे पास उपयोगकर्ता प्रोफ़ाइल लोड है और एक ही समस्या है (मुझे लगता है कि यह समस्या केवल विंडोज 7 पर होती है)। – AndiDog

+0

आपके मूल प्रश्न में वर्णित अनुसार, आपने प्रोफाइल फ़ोल्डर्स बनाए हैं, लेकिन आपने आईआईएस के लिए प्रोफाइल लोड करने के लिए आवश्यक कदम नहीं उठाया है। यदि आपने वह कदम उठाया है तो इसे अपने विवरण में जोड़ें। यदि आपने तब दिए गए लिंक को नहीं पढ़ा और निर्देशों का पालन किया। – grahamesd

+0

मैंने अपने प्रश्न में कहा कि मेरे पास यह विकल्प चालू है, इसलिए यह समाधान मेरे लिए काम नहीं कर रहा है, क्षमा करें। विंडोज 7 के साथ कुछ करना होगा। जब मेरे पास समय होगा, तो मैं विंडोज 8 (सर्वर संस्करण नहीं) पर कोशिश करूंगा और देखें कि क्या होता है। – AndiDog

14

अपना %WINDIR%\System32\inetsrv\config\applicationHost.config खोलें और <applicationPoolDefaults> देखें। <processModel> के तहत, सुनिश्चित करें कि आपके पास setProfileEnvironment="false" नहीं है। यदि आप करते हैं, तो इसे सही पर सेट करें।

+0

मान '' है। – AndiDog

+0

इसे '<प्रक्रिया मॉडल पहचान प्रकार = "ApplicationPoolIdentity" loadUserProfile = "true" setProfileEnvironment = "true" /> ' –

+2

यह उत्तर वह है जिसने मेरे लिए समस्या हल की है। –

0

मुझे हाल ही में एक ही समस्या का अनुभव हुआ।जैसा कि अमित द्वारा वर्णित है, समस्या यह है कि उपयोगकर्ता प्रोफ़ाइल लोड नहीं होती है। सेटिंग सभी एप्लिकेशन पूल के लिए है, और applicationHost.config में है (आमतौर पर सी: \ विंडोज \ System32 \ inetsrv \ config \ applicationHost.config)। यदि आप निम्नानुसार अनुप्रयोग PoolDefaults तत्वों को अद्यतन करते हैं, तो यह काम करेगा;

<applicationPoolDefaults managedRuntimeVersion="v4.0"> 
    <processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" /> 
</applicationPoolDefaults> 

हमने आईआईएस 7.5 के साथ यह कोशिश की है, और बिना किसी समस्या के उत्पादन के लिए इसे ले लिया है।

आप इस स्वचालित कर सकते हैं अगर आप चाहते हैं;

appcmd set config -section:system.applicationHost/applicationPools /applicationPoolDefaults.processModel.setProfileEnvironment:"true" /commit:apphost 

या यदि आप powershell

Set-WebConfigurationProperty "/system.applicationHost/applicationPools/applicationPoolDefaults/processModel" -PSPath IIS:\ -Name "setProfileEnvironment" -Value "true" 

आशा पसंद करते हैं इस

2

आवेदन ताल में मदद करता है - अपने आवेदन पूल - उन्नत सेटिंग ...

प्रक्रिया मॉडल - लोड उपयोगकर्ता प्रोफ़ाइल सच सेट ।

यह मेरी मदद करता है।

से https://blogs.msdn.microsoft.com/vijaysk/2009/03/08/iis-7-tip-3-you-can-now-load-the-user-profile-of-the-application-pool-identity/