好久没有问人咯,问题压了一些。
所以问问,
获得版本的方法我找到咯。
怎么程序修改呢?网上看了一些方法,UpdateResource  api,然后去msdn看了下这个函数的用法.maybe 自己天生愚钝,所以不是很懂,在这里问问高手们,请指点

解决方案 »

  1.   

    要改别的程序版本号是没有问题的:procedure TForm1.Button2Click(Sender: TObject);
    type
      PLANGANDCODEPAGE = ^LANGANDCODEPAGE;
      LANGANDCODEPAGE = record
        wLanguage: Word;
        wCodePage: Word;
      end;
    var
      mSize: Integer;
      mLen, mLen1: UINT;
      mTranslate, mFixV: Pointer;
      mHExe, mRes: THandle;
      mVersion: array of Byte;
      mFixVersion: VS_FIXEDFILEINFO;
      mFixVersion1: PVSFixedFileInfo;
      mLang: PLANGANDCODEPAGE;
      fm:pchar;
      nver:pchar;
    begin
      fm:=pchar('Project1.exe');
     // fm:=pchar(ParamStr(0));
      mSize := GetFileVersionInfoSize(fm, mRes);
      if mSize=0 then
      begin
           ShowMessage('GetFileVersionInfoSize 错:'+SysErrorMessage(GetLastError));
           exit;
      end;
      SetLength(mVersion, mSize);
      GetFileVersionInfo(fm, mRes, mSize, mVersion);
      VerQueryValue(mVersion, '', mFixV, mLen);
      mFixVersion1 := PVSFixedFileInfo(mFixV);
      mFixVersion1^.dwFileVersionMS := 12 shl 16 + 34;
      mFixVersion1^.dwFileVersionLS := 56 shl 16 + 78;
      mHExe := BeginUpdateResource(fm, false);
      if mHExe=0 then
      begin
           ShowMessage('BeginUpdateResource 错:'+SysErrorMessage(GetLastError));
           exit;
      end;
      if VerQueryValue(mVersion, 'VarFileInfo\Translation', mTranslate, mLen)  then
      begin
         mLang := PLANGANDCODEPAGE(mTranslate);
         if UpdateResource(mHExe, RT_VERSION, MakeIntResource(1),  mLang^.wLanguage, mVersion, mSize) then
         begin
           if not EndUpdateResource(mHExe, false) then
                      ShowMessage('UpdateResource 错:'+SysErrorMessage(GetLastError));
         end else
             ShowMessage('UpdateResource 错:'+SysErrorMessage(GetLastError));  end else
           ShowMessage('VerQueryValue 错:'+SysErrorMessage(GetLastError));
      FreeLibrary(mHExe);
    end;但要改自身的版本号,就难了,因为在程序运行期间是不能修改的,只能通过另一个程序来改了