Tenemos grandes archivos ejecutables (> 1,2 GB) que contienen información de versión personalizada. Intento recuperar esta 'Información de versión' de estos archivos utilizando 'GetVersionInfo' de la clase 'FileVersionInfo'. Por alguna razón, este método no devuelve la información de versión para archivos más grandes (probados con> 1 GB) en Windows XP. Funcionó para un archivo con un tamaño de 18 MB. Cuando intento lo mismo en Windows 7 (x86 y X64) funciona para todos los archivos, ¡incluso para los más grandes!Recuperar información de la versión desde archivos de gran tamaño
Utilicé una herramienta Reflector para echar un vistazo a la clase FileVersionInfo y he creado una pequeña aplicación de consola para recuperar el 'Tamaño de la información de archivo', , tal como lo hace el método 'GetVersionInfo'. Se devuelve un tamaño de 0 (cero) en Windows XP y en Windows 7 se devuelve un tamaño de 1428 para los mismos archivos. El último error en XP es 1812 ('El archivo de imagen especificado no contenía una sección de recursos').
¿Cuál es la razón por la que esto no funciona en Windows XP y funciona en Windows 7? ¿Existe un problema para recuperar la información de la versión?
A continuación el código que he probado con:
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();
}
}
Para confirmar, ¿el archivo de 18 mb funciona en XP? – keyboardP
Sí, ¡los 18 mb sí funcionan en XP! – RBDev