SRXを新しいDelphi XE6でリビルドしました。他の人にも使ってもらうために、メニューを日本語化しています。それと、32bit版、64bit版の2種類をビルドして、EG4.xとEG6.xにも対応しました。
これで、SAS9.4への移行作業でもれなくチェックして、エビデンスを残したり、書き直す前のチェックに時間的な余裕が生まれます。
似たようなツールは他にもありますが、エビデンスとなるものが出力されないのが弱点です。
SASプログラムとログを解析するユーティリティを開発するための備忘録です。This is a memo to develop utility that analyzes the SAS log.
unit version; interface type TEXEVersionData = record CompanyName, FileDescription, FileVersion, InternalName, LegalCopyright, LegalTrademarks, OriginalFileName, ProductName, ProductVersion, Comments, PrivateBuild, SpecialBuild: string; end; var theVersion: TEXEVersionData; implementation uses Windows, SysUtils, Forms; procedure LoadVersionInfo; type PLandCodepage = ^TLandCodepage; TLandCodepage = record wLanguage, wCodePage: word; end; var dummy, len: cardinal; buf, pntr: pointer; lang, key: string; begin len := GetFileVersionInfoSize(PChar(Application.ExeName), dummy); if len = 0 then RaiseLastOSError; GetMem(buf, len); try if not GetFileVersionInfo(PChar(Application.ExeName), 0, len, buf) then RaiseLastOSError; if not VerQueryValue(buf, '\VarFileInfo\Translation\', pntr, len) then RaiseLastOSError; lang := Format('%.4x%.4x', [PLandCodepage(pntr)^.wLanguage, PLandCodepage(pntr)^.wCodePage]); key := '\StringFileInfo\' + lang + '\CompanyName'; if VerQueryValue(buf, PChar(Key), pntr, len) then theVersion.CompanyName := PChar(pntr); key := '\StringFileInfo\' + lang + '\FileDescription'; if VerQueryValue(buf, PChar(key), pntr, len) then theVersion.FileDescription := PChar(pntr); key := '\StringFileInfo\' + lang + '\FileVersion'; if VerQueryValue(buf, PChar(key), pntr, len) then theVersion.FileVersion := PChar(pntr); key := '\StringFileInfo\' + lang + '\InternalName'; if VerQueryValue(buf, PChar(key), pntr, len) then theVersion.InternalName := PChar(pntr); key := '\StringFileInfo\' + lang + '\LegalCopyright'; if VerQueryValue(buf, PChar(key), pntr, len) then theVersion.LegalCopyright := PChar(pntr); key := '\StringFileInfo\' + lang + '\LegalTrademarks'; if VerQueryValue(buf, PChar(key), pntr, len) then theVersion.LegalTrademarks := PChar(pntr); key := '\StringFileInfo\' + lang + '\OriginalFileName'; if VerQueryValue(buf, PChar(key), pntr, len) then theVersion.OriginalFileName := PChar(pntr); key := '\StringFileInfo\' + lang + '\ProductName'; if VerQueryValue(buf, PChar(key), pntr, len) then theVersion.ProductName := PChar(pntr); key := '\StringFileInfo\' + lang + '\ProductVersion'; if VerQueryValue(buf, PChar(key), pntr, len) then theVersion.ProductVersion := PChar(pntr); key := '\StringFileInfo\' + lang + '\Comments'; if VerQueryValue(buf, PChar(key), pntr, len) then theVersion.Comments := PChar(pntr); key := '\StringFileInfo\' + lang + '\PrivateBuild'; if VerQueryValue(buf, PChar(key), pntr, len) then theVersion.PrivateBuild := PChar(pntr); key := '\StringFileInfo\' + lang + '\SpecialBuild'; if VerQueryValue(buf, PChar(key), pntr, len) then theVersion.SpecialBuild := PChar(pntr); finally FreeMem(buf); end; end; initialization LoadVersionInfo; end.