2012-01-11 19 views
7

हमारे पास बड़ी निष्पादन योग्य फ़ाइलें (> 1,2 जीबी) हैं जिनमें कस्टम संस्करण जानकारी है। मैं 'FileVersionInfo' कक्षा के 'GetVersionInfo' का उपयोग करके इन फ़ाइलों से 'संस्करण जानकारी' को पुनर्प्राप्त करने का प्रयास करता हूं। किसी कारण से यह विधि Windows XP में बड़ी फ़ाइलों (1 जीबी के साथ परीक्षण) के लिए संस्करण जानकारी वापस नहीं करती है। यह 18 एमबी के आकार के साथ एक फाइल के लिए काम किया था। जब मैं विंडोज 7 (x86 और X64) में कोशिश करता हूं तो यह सभी फाइलों के लिए भी काम करता है, यहां तक ​​कि बड़े बल भी!बड़ी फ़ाइलों से संस्करण जानकारी पुनर्प्राप्त करें

मैंने FileVersionInfo क्लास को देखने के लिए एक परावर्तक उपकरण का उपयोग किया और मैंने 'फ़ाइल संस्करण जानकारी'-आकार, को 'GetVersionInfo' विधि के रूप में पुनर्प्राप्त करने के लिए एक छोटा कंसोल ऐप बनाया है। विंडोज एक्सपी में 0 (शून्य) का आकार वापस आ गया है और विंडोज 7 में एक ही फाइल के लिए 1428 का आकार लौटा दिया गया है। XP में अंतिम त्रुटि 1812 है ('निर्दिष्ट छवि फ़ाइल में संसाधन अनुभाग नहीं था')।

इसका कारण यह है कि यह विंडोज एक्सपी में क्यों काम नहीं करता है और विंडोज 7 में काम करता है? क्या संस्करण जानकारी पुनर्प्राप्त करने के लिए कोई काम है?

कोड नीचे मैं के साथ परीक्षण किया है:

class Program 
{ 
    [DllImport("version.dll", BestFitMapping = false, CharSet = CharSet.Auto, SetLastError = true)] 
    public static extern int GetFileVersionInfoSize(string lptstrFilename, out int handle); 

    static void Main(string[] args) 
    { 
     Console.Write("Path which contains the executables: "); 
     string path = Console.ReadLine(); 

     foreach (string fileName in Directory.EnumerateFiles(path)) 
     { 
      int num; 
      int fileVersionInfoSize = GetFileVersionInfoSize(fileName, out num); 
      int error = Marshal.GetLastWin32Error(); 

      Console.WriteLine("File Version Info Size: " + fileVersionInfoSize); 

      if (error != 0) 
      { 
       Console.WriteLine("Last Error: " + error); 
      } 
     } 

     Console.ReadKey(); 
    } 
} 
+0

पुष्टि करने के लिए, 18 एमबी फ़ाइल XP पर काम करती है? – keyboardP

+0

हां, 18 एमबी एक्सपी पर काम करता है! – RBDev

उत्तर

2

लोडर शायद इसका पता अंतरिक्ष में पूरी फ़ाइल को नहीं ढूंढ़ सकी। संस्करण संसाधन खोजने के लिए पीई फ़ाइल प्रारूप पर पढ़ने के लिए स्वतंत्र महसूस करें।

हालांकि, आप इतनी बड़ी पीई छवि के साथ क्या कर रहे हैं? यदि इसके कस्टम संसाधन हैं, तो यह उन्हें .exe में जोड़ने के लिए बेहतर काम करता है ताकि लोडर को केवल थोड़ा सा मानचित्र बनाना पड़े, फिर उन्हें सीधे एक्सेस करें। इसके लिए आपको अपना आकार जानने की आवश्यकता है (ऑफ़सेट 124 पर 4 बाइट्स हैं जिन्हें सुरक्षित रूप से ओवरराइट किया जा सकता है क्योंकि "यह प्रोग्राम एमएस-डॉस मोड में नहीं चलाया जा सकता है।" त्रुटि संदेश स्टब)।

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