2012-03-31 15 views
5

पर नहीं लिख सकती है मैंने एक ऐप बनाया है जो केवल विंडोज सेवा के रूप में नहीं चलने पर काम करता है। खैर, सेवा चलती है, लेकिन ऐसा नहीं करता है जो इसे करना चाहिए। सेवा स्थानीय सेवा खाते का उपयोग करती है। तो डिबगिंग शुरू करने के लिए, मैंने सोचा कि मैं कुछ सरल के साथ शुरू होता है: यह एक निर्देशिका बनाने की है जब यह शुरू होता है:विंडोज सेवा% LOCALAPPDATA%

Directory.CreateDirectory(
    Environment.SpecialFolder.LocalApplicationData + "\\MyService"); 

जब मैं सेवा शुरू कर दिया, यह लगभग तुरंत बंद कर दिया और Windows कि तथ्य यह है की सूचना दी। जब मैंने उपर्युक्त कथन पर टिप्पणी की, पुन: संकलित और पुनः स्थापित किया, तो सेवा बिना रोक के भाग गई।

स्पष्ट रूप से उपर्युक्त रेखा किसी प्रकार का अपवाद फेंकता है। मेरे पास त्रुटि लॉगिंग का कोई तरीका नहीं है क्योंकि मैं फ़ाइल सिस्टम पर नहीं लिख सकता। कोई विचार क्यों स्थानीय सेवा अपने% LOCALAPPDATA% में निर्देशिका नहीं बना सकती है?

+3

किंडा दुखी है कि यह कोड संकलित करता है :( –

उत्तर

10

तुम इतनी तरह LocalApplicationData साथ GetFolderPath उपयोग करना चाहिए:

string folderName = Path.Combine(Environment.GetFolderPath(
    Environment.SpecialFolder.LocalApplicationData), 
    "MyService"); 

Directory.CreateDirectory(folderName) 
+1

+ 1 मुझे इसे मारो: 0) – Tung

+1

अब मुझे बहुत मूर्ख लगता है। मैं इसे एक भंवर दे दूंगा ... –

+0

धन्यवाद। निर्देशिका 'सी: \ विंडोज \ सेवाप्रोफाइल \ लोकल सेवा \ AppData \ Local \ MyService' बनाई गई थी। अब मैं लॉगिंग के साथ मिल सकता है। –

0

मेरा सुझाव है कि आप ईवेंट लॉग में अपवाद विवरण लिखें। सभी उपयोगकर्ता खातों को ईवेंट लॉग पर लिखने की अनुमति होती है जब तक कि लॉग और स्रोत नाम पहले से ही व्यवस्थापक द्वारा बनाए गए हों (जिसे आप केवल ऐप को पहले ही चलाकर कर सकते हैं)।

त्रुटि के मूल कारण के रूप में, यह हो सकता है क्योंकि स्थानीय सेवा को सामान्य रूप से डिफ़ॉल्ट रूप से बनाए गए प्रोफ़ाइल फ़ोल्डर का पूरा सेट नहीं मिलता है। मुझे यकीन नहीं है कि यह डिज़ाइन द्वारा है, या बस मैंने विभिन्न मशीनों पर जो देखा है।

+0

धन्यवाद। मैं इवेंट लॉग का प्रयास करूंगा। मेरी समझ यह है कि (कम से कम विंडोज 7 पर) स्थानीय सेवा के लिए '% LOCALAPPDATA%' 'C: \ Windows \ ServiceProfiles \ LocalService है \ AppData \ Local'। –

4

मुझे लगता है कि यह हो सकता है कोई विशेष फ़ोल्डर है क्योंकि वहाँ। स्थानीय सेवा खाते के रूप में चलते समय आप उस उपयोगकर्ता के अंतर्गत चल रहे हैं, लॉग इन उपयोगकर्ता नहीं। इसलिए आप एक विशेष फ़ोल्डर का अनुरोध कर रहे हैं जो शायद अस्तित्व में नहीं है, क्योंकि मुझे नहीं लगता कि स्थानीय सेवा में प्रोफ़ाइल है। (मैं गलत हो सकता है) - मैं गलत था: पी

बस मामले में किसी को भी पॉप द्वारा:

C:\Windows\ServiceProfiles\LocalService 

, स्थानीय सेवा प्रोफ़ाइल फ़ोल्डर है तो यह वहाँ में खत्म हो जाएगा।

आप डिबग करने के लिए यह एक कोशिश पकड़ के साथ कि लाइन के चारों ओर, और फिर एक फाइल करने के लिए त्रुटि लिखना चाहते हैं: तो आप त्रुटि

मार्टिन

के कारण क्या देख सकते हैं

try 
{ 
    Directory.CreateDirectory(Environment.SpecialFolder.LocalApplicationData + "\\MyService"); 
} 
catch (Exception ex) 
{ 
    System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\MyServicelog.txt",true); 
    file.WriteLine(ex.Message); 
    file.Close(); 
} 

कम से कम

+0

+1 यह सबसे अधिक संभावना है कि प्रोफाइल नहीं है। –