我有一个包含exe的zip文件,我想获取exe文件的版本号,而不必在物理上提取它。
我知道如何阅读zip文件的内容,并且有代码可以读取其中的文本文件,但我无法找到如何获取exe版本。
答案 0 :(得分:1)
添加对Shell32.dll -library的引用。 然后你可能会找到你想要的东西:
Shell shell = new Shell();
var folder = shell.NameSpace( <path_to_your_zip> );
// Just get the names of the properties
List<string> arrHeaders = new List<string>();
for (int i = 0; i < short.MaxValue; i++)
{
string header = folder.GetDetailsOf(null, i);
if (String.IsNullOrEmpty(header))
break;
arrHeaders.Add(header);
}
// Loop all files inside the zip and output their properties to console
foreach (Shell32.FolderItem2 item in folder.Items())
{
for (int i = 0; i < arrHeaders.Count; i++)
{
Console.WriteLine("{0}\t{1}: {2}", i, arrHeaders[i], folder.GetDetailsOf(item, i));
}
}
击> <击> 撞击>
编辑:如果没有从包中实际提取文件,这似乎是不可能的。这样的事情非常简单,但是如果文件很大和/或有效压缩,则需要时间。
Shell s = new Shell();
var folder = s.NameSpace( <path_to_your_zip> );
foreach (FolderItem2 item in folder.Items())
{
string oItemName = Path.GetFileName(item.Path);
try
{
string oTargetFile = Path.Combine(Path.GetTempPath(), oItemName);
if (File.Exists(oTargetFile))
File.Delete(oTargetFile);
Folder target = s.NameSpace(Path.GetTempPath());
target.CopyHere(item, 4);
var info = FileVersionInfo.GetVersionInfo(oTargetFile);
if (File.Exists(oTargetFile))
File.Delete(oTargetFile);
Console.WriteLine(oItemName + "'s version is: " + info.FileVersion);
}
catch (Exception e)
{
Console.WriteLine(oItemName + ": Unable to obtain version info.\n" + e.Message);
}
}