2017-01-24 24 views
8

है मेरे पास एप्लिकेशन है और मुझे एक प्रमाणपत्र का उपयोग करना है जिसके लिए तत्काल विंडो से पिन की आवश्यकता है।सर्टिफिकेट में निजी कुंजी सेट करना विंडोज सेवा

मेरे पास निम्नलिखित कोड है।

SecureString password = GetPassword(); 
X509Certificate2 certificate = GetCertificate(); 

var cspParameters = new CspParameters(1, 
            "ProviderName", 
            "KeyContainerName", 
            null, 
            password); 

certificate.PrivateKey = new RSACryptoServiceProvider(cspParameters); 

सब कुछ सांत्वना आवेदन में ठीक काम करता है लेकिन जब मैं खिड़कियों सेवा या कंसोल आवेदन में उस कोड को चलाने के कार्य अनुसूचक से कि लाइन पर फिर अनुप्रयोग फ़्रीज शुरू कर दिया।

certificate.PrivateKey = new RSACryptoServiceProvider(cspParameters); 

कोई अपवाद नहीं, कोई प्रगति नहीं।

मैं एक आवेदन के रूप में एक ही प्रमाण पत्र के साथ विंडोज सेवा चला रहा हूं।

विंडोज 10/विंडोज सर्वर 2012

आप किसी भी विचार क्या गलत है है?

+0

आप स्थानीय सिस्टम के रूप में सेवा चलाने की कोशिश कर सकते हैं और 'इंटरएक्टिव सर्विसेज डिटेक्शन' सेवा (UI0Detect) शुरू कर सकते हैं। यदि कोई पिन प्रॉम्प्ट प्रतीक्षा कर रहा है तो इसे आपको विशेष डेस्कटॉप 0 पर ले जाना चाहिए जहां आप पिन दर्ज कर सकते हैं। – pepo

+0

मैंने कोशिश की लेकिन कुछ भी नहीं हुआ। मैं अगले हफ्ते फिर से कोशिश करूंगा। – Degusto

उत्तर

1

ठीक है, ब्रेक के बाद मुझे समाधान मिला है।

मैं इस रेखा के आसपास प्रतिरूपण जोड़ने के लिए किया था:

certificate.PrivateKey = new RSACryptoServiceProvider(cspParameters); 

मैं अपने सेवा में की तरह एक ही साख का इस्तेमाल किया और LogonType इंटरएक्टिव के रूप में निर्धारित किया है।

0

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

+0

लेकिन कंसोल एप्लिकेशन में मैं निजी कुंजी को बदल सकता हूं और प्रॉम्प्ट प्रकट नहीं होता है। निजी कुंजी को बदलने के बिना मुझे कंसोल एप्लिकेशन में तत्काल है। – Degusto

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