使用jscript检测exe的版本和公司名称

Ale*_*son 3 javascript scripting getfileversion

我知道如何使用jscript检索exe的版本,但我找不到任何方法来检索"公司","内部名称"或"产品名称"等其他信息.

function version_of( file_name ) 
{
   var fso = new ActiveXObject("Scripting.FileSystemObject");
   var f;
   try {
      f = fso.GetFile( file_name )
   } catch( e ) {
      throw new Error( e.number, "Error retrieving version of file ``" + file_name + "'': " + e.description );
   }
   var v = fso.GetFileVersion( f );
   if ( !v ) {
      throw new Error( 1, "File ``" + file_name + "'' has not got a version" );
   }
   return v;
}

WScript.Echo( version_of( "c:\\windows\\system32\\winver.exe" ) );
Run Code Online (Sandbox Code Playgroud)

也许我会编写自己的COM对象来完成这项工作......

Hel*_*len 5

可以使用GetDetailsOfShell Folder对象的方法在脚本中获取扩展文件属性,例如公司名称或产品名称.该方法采用与扩展属性关联的从零开始的索引号,并将属性值作为字符串返回.通常,GetDetailsOf可用于检索可在详细Shell视图中显示的任何类型的信息(查看 - >选择详细信息).请参阅检索扩展文件属性.

唯一的问题是不同的Windows版本提供不同的扩展文件属性集.例如,Windows XP有34个文件属性,Windows Vista - 266,Windows 7 - 284.不仅属性索引可以不同,而且属性名称(Windows XP中的持续时间 = Windows Vista中的长度),这是非常令人困惑的.有关可用文件属性及其索引号的完整列表,请参阅此页面或使用如下脚本:

var oShell = new ActiveXObject("Shell.Application");
var oFolder = oShell.Namespace("C:");

for (var i = 0; i < 300 /* some large number*/; i++)
  WScript.Echo(i + " " + oFolder.GetDetailsOf(null, i));
Run Code Online (Sandbox Code Playgroud)


无论如何,这是在Windows Vista上执行任务的示例代码.我找不到内部名称属性(可能没有正确搜索),因此包括文件版本产品版本:

var COMPANY_NAME    = 33;
var FILE_VERSION    = 145;
var PRODUCT_NAME    = 251;
var PRODUCT_VERSION = 252;

var oShell  = new ActiveXObject("Shell.Application");
var oFolder = oShell.Namespace("C:\\Windows");
var oFile   = oFolder.ParseName("notepad.exe");

WScript.Echo("Company name: " + oFolder.GetDetailsOf(oFile, COMPANY_NAME));
WScript.Echo("Product name: " + oFolder.GetDetailsOf(oFile, PRODUCT_NAME));
WScript.Echo("File version: " + oFolder.GetDetailsOf(oFile, FILE_VERSION));
WScript.Echo("Product version: " + oFolder.GetDetailsOf(oFile, PRODUCT_VERSION));
Run Code Online (Sandbox Code Playgroud)

请注意,您可以使用GetDetailsOf(null, property_index)获取特定于语言环境的属性名称(这在非英语Windows版本上非常有用):

WScript.Echo(oFolder.GetDetailsOf(null, COMPANY_NAME) + ": " + oFolder.GetDetailsOf(oFile, COMPANY_NAME));
Run Code Online (Sandbox Code Playgroud)