2013-01-17 3 views
1

명령 줄 도구가 필요하며 PE 실행 파일의 리소스에서 버전 정보를 검색하고 새로운 버전으로 바이너리를 패치 할 수 있어야합니다. 내가해야 할 일은 PE 바이너리의 버전을 자동으로 증가시키는 것이다.스크립트 가능한 PE 리소스 편집기

아이디어가 있으십니까?

답변

2

리소스 도구 라이브러리 [1, 2]은 COM 인터페이스를 사용합니다. 이미 VBScript/JScript에서 사용하고 버전 정보 패치를 자동화 할 수 있습니다.

COM 인터페이스 구문을 보려면 DLL 유형 라이브러리를 가져 오거나 찾아보십시오. 아래는 VersionInfo 패치 자동화의 코드 스 니펫입니다.

WshShell = WScript.CreateObject("WScript.Shell"); 
WScript.Echo("Current Directory: " + WshShell.CurrentDirectory); 
Image = new ActiveXObject("AlaxInfo.ResourceTools.Image"); 
Image.Initialize(WshShell.CurrentDirectory + "\\Sample.dll"); 
WScript.Echo("Product Version: " + Image.VersionInfo.ProductVersionString); 
WScript.Echo("File Version: " + Image.VersionInfo.FileVersionString); 

VersionString = Image.VersionInfo.FileVersionString; 
VersionString = VersionString.replace(" ", ""); 
VersionString = VersionString.replace(",", "."); 
if(/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/i.exec(VersionString) == null) 
    throw "Incorrect version string"; 
V1 = new Number(RegExp.$1); 
V2 = new Number(RegExp.$2); 
V3 = new Number(RegExp.$3); 
V4 = new Number(RegExp.$4); 
WScript.Echo("File Version Components: " + V1 + ", " + V2 + ", " + V3 + ", " + V4); 
V4++; 
VersionString = V1 + "." + V2 + "." + V3 + "." + V4; 
WScript.Echo("New File Version: " + VersionString); 

Image.VersionInfo.SetFileVersion(V1 * 65536 + V2, V3 * 65536 + V4); 
Image.VersionInfo.SetString(0, "FileVersion", VersionString); 
Image.VersionInfo.Update(); 
Image.EndUpdate(false); 

라이브러리는 기본적으로 BeginUpdateResource 기능을 통해 래퍼뿐만 아니라 수 있지만, 다른 버전 정보 구성 요소, 문자열, 비트 맵을 패치로 자동화 인터페이스를 제공 친구입니다.

+0

이것은 실제로 필요한 것 같습니다. 그러나, 나는 단지 'new ActiveXObject ("AlaxInfo.ResourceTools.Image")'를 수행하는 테스트 파일로 ResourceTools를 제대로 설치 (Win8 및 Win7, 64 비트 모두 사용) 할 수는 없습니다. "자동화 서버에서 개체를 만들 수 없습니다."라는 오류가 나타납니다. regsvr32 .dll을 사용하면 "레지스트리 값이 잘못되었습니다."라는 메시지가 나타납니다. 이 아이디어를 얻으려면 어떻게해야할까요? (죄송 합니다만, 나는 COM에 관해서 다소 우둔합니다.) – Unknown

+0

'.js' 스크립트를 실행할 때 관리자 명령 프롬프트에서 Win32 및/또는 x64 버전을 설치하고 상승 된 권한 '2'를 설치해야합니다. 적절한 bitness의'cscript.exe'를 실행하십시오. 64 비트 Windows에서 Win32의 경우 'C : \ Windows \ syswow64 \ cscript.exe myscript.js'를 실행합니다. –

+0

Windows 7/8, 64 비트에서는 작동하지 않습니다. 관리자 특권, 올바른 cscript 등으로 실행, 같은 오류. 그러나 깨끗한 Windows XP 32 비트 설치 (여전히 regsvr32 .dll에 설치)에서 작동하는 것으로 보이므로 일종의 허용 가능합니다. 감사! – Unknown