मैं ASP.Net एप्लिकेशन पर काम करता हूं जो पहले से मौजूद Winforms डेस्कटॉप एप्लिकेशन का एक वेब संस्करण है। डेस्कटॉप एप्लिकेशन अपने व्यवहार को अनुकूलित करने के लिए सक्षम सुविधाओं को परिभाषित करने वाली लाइसेंस फ़ाइल को पढ़ता है। एप्लिकेशन को किसी विशिष्ट मशीन पर लॉक करने के लिए, लाइसेंस फ़ाइल की सेटिंग में से एक सिस्टम के पहले वॉल्यूम की क्रम संख्या है। स्टार्टअप पर एप्लिकेशन जांचता है कि लाइसेंस फ़ाइल में सीरियल नंबर वॉल्यूम सीरियल नंबर से मेल खाता है। वॉल्यूम क्रमांक प्राप्त करना PInvoking kernel32.dll के GetVolumeInformation फ़ंक्शन द्वारा किया जाता है।
हालांकि एएसपीनेट संस्करण में स्थानीय सेवा या स्थानीय नेटवर्क पहचान का उपयोग करने वाले एक मानक एप्लिकेशन पूल में पिनवोक की अनुमति नहीं है, जिसके परिणामस्वरूप लाइसेंस फ़ाइल की जांच करना असंभव है। मैं एप्लिकेशन स्टार्टअप पर लाइसेंस की जांच कैसे कर सकता हूं?

मैं निम्नलिखित विकल्पों के बारे में सोच सकता हूं:

  • PInvoke को एक ऐसी विधि से बदलना जिसके लिए वॉल्यूम सीरियल नंबर प्राप्त करने के लिए विशेष अनुमति की आवश्यकता नहीं है (क्या यह WMI के मामले में है?)
  • सभी लाइसेंस चेकिंग कोड को एक अलग असेंबली में डालकर इसे जीएसी में स्थापित करें ताकि इसे ऊंचा निष्पादित किया जा सके
  • केवल संस्थापन प्रक्रिया के दौरान मेरे आवेदन के लिए व्यवस्थापक पहचान के साथ एक एप्लिकेशन पूल बनाना

पहला समाधान सबसे अच्छा होगा लेकिन मुझे नहीं पता कि यह संभव है या नहीं।
क्या मेरे पास अन्य संभावनाएं हैं? प्रत्येक विधि के पेशेवरों और विपक्ष क्या हैं? कौन सा सबसे अच्छा है?

0
jeremy-george 20 सितंबर 2011, 19:37

1 उत्तर

सबसे बढ़िया उत्तर

मैं डब्लूएमआई का उपयोग करने का सुझाव देता हूं। Win32_Volume वर्ग में वॉल्यूम की क्रम संख्या है। आप कुछ इस तरह उपयोग कर सकते हैं:

using System.Management;
SelectQuery query = new SelectQuery("Win32_Volume");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject obj in searcher.Get())
{
    Console.WriteLine("{0} {1}", obj["DriveLetter"], obj["SerialNumber"]);
}
1
Laurion Burchall 23 सितंबर 2011, 13:16