2014-01-28 2 views
0

리소스 .rc 파일을 편집하고 쓰는 프로세스를 찾으려고합니다..rc 파일에 쓰려고하는 VBS 스크립트가 오류를 반환합니다.

Error: Invalid procedure call or argument 
Code: 800A0005 
Source: Microsoft VBScript runtime error 

내가 쓰는 스크립트를 수정 : 나는 How to increment values in resourse file by using vbscript에 나와있는 예제 코드를 사용하려고 시도하지만, 두 샘플의 마지막 줄은 (fso.OpenTextFile (rcfile에, 2)에 .write의 rctext) 같은 오류를 반환 .txt 파일 및 잘 작동하지만 문제가 .rc 파일을 쓰는 원인이 될 수 있습니다로 난 당황 스럽다. 아이디어는 모든 파일을 읽어

rctext = fso.OpenTextFile(rcfile).ReadAll 
rctext = .... 
fso.OpenTextFile(rcfile, 2).Write rctext 

(간체), 그리고 지금까지 열린 파일에 대한 참조를 잡고 어떤 변수가 폐쇄되지 않은이있는 한, 그 다음 필요한 사항 변경 링크 된 샘플에서

답변

0

내 질문에 대한 답변에 귀하의 답변 (@MC ND 및 @ Ekkehard.Horner)이 모두 필요하다고 생각됩니다. 또한 일단 vbs 스크립트를 변경하여 유니 코드의 .rc 파일에 열어 본 이유는 무엇인지 잘 모르겠습니다. 스크립트를 오류없이 실행할 수있었습니다. 여기

는 거기에 VBS 스크립트가 최종 형태입니다입니다 :

Const ForReading = 1, ForWriting = 2 
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 
Const DoNotCreate = false 

rcFile = "C:\Path\To\RC\File.rc" 
major = 4 
minor = 3 
maint = 2 
build = 1 
version = major & "," & minor & "," & maint & "," & build 

Set fso  = CreateObject("Scripting.FileSystemObject") 
Set fileObj = fso.OpenTextFile(rcFile, ForReading, DoNotCreate, TristateTrue) 
rcText  = fileObj.ReadAll 
fileObj.Close 

Set regex  = New RegExp 
regex.Global = True 
regex.Pattern = "(PRODUCTVERSION|FILEVERSION) \d+,\d+,\d+,\d+" 
rcText  = regex.Replace(rcText, "$1 " & version) 

regex.Pattern = "(""(ProductVersion|FileVersion)"",) ""\d+, \d+, \d+, \d+""" 
rcText  = regex.Replace(rcText, "$1 """ & Replace(version, ",", ", ") & """") 

Set fileObj = fso.GetFile(rcFile) 
Set textStream = fileObj.OpenAsTextStream(ForWriting, TristateTrue) 
textStream.Write rcText 
textStream.Close 

작동하지 않는 유일한 것은이 ProduceVersion 교체에 대한 정규식 |의 FileVersion 값을, 그러나 희망 나는 내에서 그를 망치로 수 합리적인 시간.

0

파일을 변경하고 파일을 다시 열어 변경된 내용을 파일에 씁니다.

그리고 일반적으로 작동합니다. 그러나 때때로 읽기 용으로 열린 파일은 나중에 쓰기 위해 열 수 없을 정도로 빨리 닫히지 않습니다.

가 닫혀 파일을 보장하기 위해 다음 쓰기 용으로 열 수 있습니다, 당신의 라인으로

set f = fso.OpenTextFile(rcfile) 
rctext = f.ReadAll 
f.Close 
0

에 읽기 코드를 변경

fso.OpenTextFile(rcfile, 2).Write rctext 

세 가지 (액세스 FSO, 열린 파일을 수행, 쓰기), 잘못 될 수있는 많은 것들이 있습니다. 처음 두 조치에 관한 문제에 대한 아이디어는 this answer을 참조하십시오. 다른 answer은 쓰기와 관련이 있습니다.

귀하의 경우, a.txt와 함께 작동하지만 b.rc와 함께 작동하지 않는 증거는 파일 열기가 비난받을 가능성이 거의 없음을 의미합니다 (그래서 .Close가 귀하를 저장하지는 않습니다). 나는 .rc가 텍스트 스트림이 인코딩 할 수없는 유니 코드 (UTF-8/UTF-16) 데이터를 포함하고 있다고 의심한다.

따라서 unicode 매개 변수를 사용하여 UTF-16 인코딩 또는 UTF-8의 경우 ADODB.Stream으로 파일을 읽고 쓸 수 있습니다.

관련 문제