我正在尝试找到一种方法来获取C#中COM DLL上的扩展文件属性(特别是“产品版本”)。我在MSDN上发现了一些使用Shell32添加“Microsoft Shell控件和自动化”COM参考的示例,但文档似乎有些模糊。有一种简单的方法可以做到这一点吗?
例如:使用C:\ Windows \ Notepad.exe的以下属性:
我想以编程方式获取C#中的“Product version”属性。顺便说一句,这可能是任何文件,但是,我只是使用Notepad.exe,因为它是一个通用的例子
答案 0 :(得分:4)
或者,您可以使用FileVersionInfo
类在一行中执行此操作:
Console.WriteLine(FileVersionInfo.GetVersionInfo(@"C:\Windows\notepad.exe").ProductVersion);
答案 1 :(得分:1)
我想出了以下易于使用的函数,它将返回任何文件属性的值:
public static string GetExtendedFileAttribute(string filePath, string propertyName)
{
string retValue = null;
Type shellAppType = Type.GetTypeFromProgID("Shell.Application");
object shell = Activator.CreateInstance(shellAppType);
Shell32.Folder folder = (Shell32.Folder)shellAppType.InvokeMember("NameSpace", System.Reflection.BindingFlags.InvokeMethod, null, shell, new object[] { @"C:\Windows\System32" });
int? foundIdx = null;
for (int i = 0; i < short.MaxValue; i++)
{
string header = folder.GetDetailsOf(null, i);
if (header == propertyName)
{
foundIdx = i;
break;
}
}
if (foundIdx.HasValue)
{
foreach (FolderItem2 item in folder.Items())
{
if (item.Name.ToUpper() == System.IO.Path.GetFileName(filePath).ToUpper())
{
retValue = folder.GetDetailsOf(item, foundIdx.GetValueOrDefault());
break;
}
}
}
return retValue;
}
这是一个如何调用它的例子:
static void Main(string[] args)
{
Console.WriteLine(GetExtendedFileAttribute(@"C:\Windows\Notepad.exe", "Product version"));
Console.ReadLine();
}
这是输出:
答案 2 :(得分:0)
.NET有内置方法来执行此操作。
MessageBox.Show("Notepad product version " + GetProductVersion("C:\\Windows\\notepad.exe"), "Product Version");
public string GetProductVersion(string fileName)
{
System.Diagnostics.FileVersionInfo fileVersionInfo =
System.Diagnostics.FileVersionInfo.GetVersionInfo(fileName);
return fileVersionInfo.ProductVersion;
}