2010-04-10 15 views
6

मेरे विंडोज 7 सिस्टम पर, GetVersionEx विंडोज एपीआई फ़ंक्शन "6.0" देता है, जो Windows Vista को इंगित करता है, जब यह should "6.1" लौटाता है।GetVersionEx विंडोज 7 पर काम नहीं कर रहा है?

अगर यह मायने रखती है, मैं निम्नलिखित डेल्फी कोड का इस्तेमाल किया:

function winver: string; 
var 
    ver: TOSVersionInfo; 
begin 
    ver.dwOSVersionInfoSize := SizeOf(ver); 
    if GetVersionEx(ver) then 
    with ver do 
     result := IntToStr(dwMajorVersion) + '.' + IntToStr(dwMinorVersion) + '.' + IntToStr(dwBuildNumber) + ' (' + szCSDVersion + ')'; 
end; 

और स्ट्रिंग "6.0.6002 (सर्विस पैक 2)" वापस आ गया था।

क्या यह बेहद अजीब नहीं है?

उत्तर

9

अब मुझे पता चला है कि जब मेरा एप्लिकेशन डेल्फी 200 डीबगर के माध्यम से चलता है तो GetVersionEx Vista देता है, लेकिन विंडोज 7 जब एप्लिकेशन को अकेले निष्पादित किया जाता है। मैंने यह भी पाया कि आरएडी स्टूडियो (डेल्फी आईडीई) वास्तव में विंडोज विस्टा एसपी 2 के लिए संगतता मोड में चलता है। इसलिए सब कुछ समझ में आता है, जैसा कि किबाब द्वारा इंगित किया गया है, एक बाल प्रक्रिया अपनी मूल प्रक्रिया की संगतता सेटिंग्स को "वारिस" करेगी।

8

क्या आपका निष्पादन योग्य परिभाषित किसी भी संगतता सेटिंग्स के साथ चल रहा है (मुझे लगता है कि यह विरासत डेल्फी अनुप्रयोगों का मामला हो सकता है)? GetVersionEx के प्रलेखन राज्यों: के रूप में वह खुद को पहचान करता है, जो ऑपरेटिंग सिस्टम स्थापित किया गया है कि नहीं हो सकता है संगतता मोड प्रभाव में है

हैं, तो GetVersionEx समारोह ऑपरेटिंग सिस्टम की रिपोर्ट। उदाहरण के लिए, यदि संगतता मोड प्रभावी है, तो GetVersionEx ऑपरेटिंग सिस्टम की रिपोर्ट करता है जिसे एप्लिकेशन संगतता के लिए चुना गया है।

शायद GetProductInfo क्या आप चाहते हैं कर सकते हैं?

+0

डेल्फी 200 वास्तव में पुराना नहीं है ... –

+0

आपको यह भी याद रखना होगा कि यदि आप बाल प्रक्रिया बना रहे हैं, उदाहरण के लिए Vista Vista SP2 के साथ कॉमेटिबिलिटी सेट की है, तो उस बच्चे की प्रक्रिया भी उस व्यवहार को प्राप्त करेगी। उदाहरण: आप कॉम्पटिबिलिटी VistaSP2 के साथ टोटल कमांडर का उपयोग कर रहे हैं, तो टीसी द्वारा शुरू की गई प्रत्येक प्रक्रिया Vista Vista2 संगतता का भी उपयोग करेगी। – kibab

+4

अब मुझे पता चला है कि जब मेरा एप्लिकेशन डेल्फी 200 डीबगर के माध्यम से चलता है तो GetVersionEx Vista देता है, लेकिन विंडोज 7 जब एप्लिकेशन को अकेले निष्पादित किया जाता है। –

1

मुझे लगता है कि यह सिर्फ आप ही हो सकता है। यानी आपके डी 2009 को विंडोज़ द्वारा चिह्नित किया जा सकता है, क्योंकि संगतता मोड में चलाने की आवश्यकता है। मैंने आपके फ़ंक्शन के साथ एक टेस्ट ऐप बनाया है, और डिबगर और बाहरी रूप से डी 2009 और डी 2010 के साथ दोनों को चलाया है (विंडोज एक्सप्लोरर में एक्सई पर क्लिक करें), और सभी 4 मामलों के लिए, यह वापस आया: 6.1.7600()

विंडोज 7, 32-बिट पर चल रहा है।

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