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.