2014-11-20 10 views
7

सबसे पहले मैं इस मुद्दे के साथ मेरी मदद करने के लिए धन्यवाद कहना चाहता हूं। मैं वास्तव में आपके समय और प्रयासों की सराहना करता हूं।पावरहेल डब्लूएमआई आउटपुट सी # डब्लूएमआई आउटपुट से मेल नहीं खाता

शीर्षक यह बहुत अच्छी तरह से बताता है हालांकि मैं कुछ विशिष्टताओं को प्रदान करता हूं। असल में यदि मैं अपने ओएस संस्करण को सी # का उपयोग करके खींचता हूं तो यह परिणाम 6.2 देता है जो विंडोज 8 के लिए है, भले ही मेरा सिस्टम 8.1 है, जो 6.3 लौटाएगा। मेरे शोध के बाद मैंने पाया कि यह सिस्टम के अंदर एक दस्तावेज सीमा थी। पर्यावरण वर्ग, ... उन "विशेषताओं" से प्यार होना चाहिए।

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

जब मैंने पावरहेल हालांकि डब्लूएमआई को मतदान करने की कोशिश की तो यह सब मुझ पर खराब हो गया। मुझे याद नहीं है, हालांकि Powershell, मैं अपनी बस बिल्लियों नहीं है कि उत्सुक मिल :)


सी # कोड लगता है कि यही कारण है कि मैं एक WMI खोज किया:


string version = Environment.OSVersion.ToString(); 
MessageBox.Show(version); 
//Output "Microsoft Windows NT 6.2.9200.0" 

पावरहेल कोड:


[System.Environment]::OSVersion | Select-Object -Property VersionString 
//OUtput "Microsoft Windows NT 6.3.9600.0" 

मैं दोनों 86 की कोशिश की है और 64 मेरी सी # कार्यक्रम के बनाता है Powershell दोनों x86 और x64 चल रहा है और साथ ही। विसंगतियां नहीं बदलीं।

यह मेरे लिए कई प्रश्न उठाता है लेकिन बुनियादी बात यह है कि पावरहेल को सही जानकारी कहां मिलती है? क्या पावरहेल reg का उपयोग करता है जैसे मैंने अपने आउटपुट को ठीक करने की योजना बनाई थी? चूंकि मेरे निर्माण लक्ष्य हैं। नेट 3.5 पावरहेल खींचता है। नेट 4.5 (मेरा निर्माण बदल गया और यह कुछ भी नहीं बदला)।

मेरी समझ से [सिस्टम। पर्यावरण] :: ओएसवीर्सन जानकारी को सिस्टम के रूप में समान खींचता है। पर्यावरण .OSVersion।

पावरहेल कैसे काम करता है और सी # विफल रहता है ??

:) फिर से धन्यवाद!

+4

विंडोज़ में संस्करण जांच विकसित हो रही है। स्पष्ट रूप से .NET OSVersion प्रॉपर्टी Windows [GetVersionEx] (http://technet.microsoft.com/en-us/windows/system.environment.osversion (v = vs.99) .aspx) फ़ंक्शन द्वारा रिपोर्ट किए गए संस्करण को लौटाती है। [इस आलेख] के अनुसार (http://msdn.microsoft.com/en-us/library/windows/desktop/dn302074.aspx) "हमने कुछ महत्वपूर्ण बदलाव किए हैं कि कैसे GetVersion (Ex) API Windows में काम करते हैं 8.1 अवांछित ग्राहक व्यवहारों के कारण अतीत में GetVersion (Ex) API का उपयोग कैसे किया गया है। "उस पृष्ठ पर विवरण आपको C# आउट को सॉर्ट करने में मदद कर सकता है। –

उत्तर

2

जहां तक ​​मैं कह सकता हूं कि सी # प्रोग्राम में केवल Environment.Version कॉल गलत है (6.2)। PowerShell में यह सही है (6.3)। WMI में PowerShell या C# के माध्यम से बुलाया गया यह सही है। वास्तव में, Add-Type का उपयोग कर PowerShell में स्रोत से संकलित सी # 6.3 देता है।

आलेख here (धन्यवाद बूगा रू) में देखकर यह इंगित करता है कि जब तक कि आपका एप्लिकेशन विशेष रूप से कहता है कि यह एक प्रकट फ़ाइल के माध्यम से विंडोज 8.1 को लक्षित नहीं करता है, तो आपको पुराना संस्करण (6.2) मिलता है।

आप एक सी # आवेदन एक आवेदन मैनिफ़ेस्ट फ़ाइल जोड़ने और लाइन

<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> 

यह मान लेना कि माइक्रोसॉफ्ट पर PowerShell के लेखकों के लिए एक आवेदन शामिल सुरक्षित लगता है uncommenting से 8.1 समर्थन की घोषणा के द्वारा सही संस्करण वापसी कर सकते हैं शक्तिशक्ति के साथ प्रकट करें।exe कि विंडोज 8.1 समर्थन घोषित करता है।

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