カスタムバージョン情報を含む大きな実行可能ファイル(> 1,2 GB)があります。 「FileVersionInfo」クラスの「GetVersionInfo」を使って、これらのファイルからこの「バージョン情報」を取得しようとしました。 何らかの理由で、この方法でWindows XPで大容量ファイル(Tested with 1 GB以上)のバージョン情報が返されません。それは18 MBのサイズのファイルのために働いた。 Windows 7(x86およびX64)で同じものを試してみると、すべてのファイル、さらに大きなoncesでも動作します!大きなファイルからバージョン情報を取得
Reflectorツールを使用してFileVersionInfoクラスを調べました。「GetVersionInfo」メソッドと同じように、「ファイルバージョン情報」サイズ を取得するための小さなコンソールアプリケーションを作成しました。 Windows XPおよびWindows 7では、サイズが0(ゼロ)が返され、同じファイルに対して1428のサイズが返されます。 XPの最終エラーは1812です( '指定されたイメージファイルにはリソースセクションがありませんでした')。
これがWindows XPでは動作しないのはなぜですか、Windows 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();
}
}
確認するには、18MBのファイルはXPで動作しますか? – keyboardP
はい、18MBはXPで動作します! – RBDev