3

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" ) );

多分私は仕事をするために私自身のCOMオブジェクトを書くでしょう...

4

3 に答える 3

5

会社名や製品名などの拡張ファイル プロパティGetDetailsOfは、ShellFolderオブジェクトのメソッドを使用してスクリプトで取得できます。このメソッドは、拡張プロパティに関連付けられた 0 から始まるインデックス番号を取得し、プロパティ値を文字列として返します。一般に、詳細なシェル ビュー ( [表示] -> [詳細の選択]GetDetailsOf )に表示できるあらゆる種類の情報を取得するために使用できます。拡張ファイル プロパティの取得を参照してください。

唯一の問題は、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));


とにかく、これは 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));

を使用して、ロケール固有のプロパティ名を取得できることに注意してくださいGetDetailsOf(null, property_index)(これは、英語以外の Windows バージョンで役立ちます)。

WScript.Echo(oFolder.GetDetailsOf(null, COMPANY_NAME) + ": " + oFolder.GetDetailsOf(oFile, COMPANY_NAME));
于 2010-01-14T21:41:07.280 に答える
1

jscript にとどまり、JScript.NET でコンパイルすることにより、System.Diagnostics.FileVersionInfo から情報を取得できます。Windows Scripting Host から呼び出す必要がある場合は、COM 相互運用機能を介して公開できます。

import System.Diagnostics;

private function GetCompanyName(filename) {
    return FileVersionInfo.GetVersionInfo(filename).CompanyName;
 }

 private function GetInternalName(filename) {
    return FileVersionInfo.GetVersionInfo(filename).InternalName;
 }

private function GetProductName(filename) {
    return FileVersionInfo.GetVersionInfo(filename).ProductName;
}
于 2009-12-23T09:41:22.780 に答える