Ver Mensaje Individual
  #3  
Antiguo 26-10-2023
javier14 javier14 is offline
Miembro
 
Registrado: ago 2023
Posts: 12
Reputación: 0
javier14 Va por buen camino
Código Delphi [-]
function FileVersionToInteger(const version: string): Integer;
var
  parts: TArray<string>;
  i, factor: Integer;
begin
  parts := version.Split(['.']);
  Result := 0;
  factor := 1;
  for i := High(parts) downto Low(parts) do
  begin
    Result := Result + StrToInt(parts[i]) * factor;
    factor := factor * 1000;
  end;
end;

procedure TForm1.CambiarVersionArchivo(const nombreArchivo: string;
  nuevaVersion: string);
var
  info: VS_FIXEDFILEINFO;
  handle, len: DWORD;
  datos, ptr: PChar;
  errorCode : DWORD;
begin
  nuevaVersion := nuevaVersion.Replace('.', '');
  nuevaVersion := nuevaVersion.PadRight(4, '0');
  nuevaVersion := nuevaVersion.PadLeft(8, '0');
  var nuevaVersionInt := FileVersionToInteger(nuevaVersion);

  handle := BeginUpdateResource(PChar(nombreArchivo), False);
  if handle = 0 then
    RaiseLastOSError;

  len := GetFileVersionInfoSize(PChar(nombreArchivo), handle);
  if len = 0 then
  begin
    EndUpdateResource(handle, False);
    RaiseLastOSError;
  end;

  datos := AllocMem(len);
  try
    if not GetFileVersionInfo(PChar(nombreArchivo), handle, len, datos) then
    begin
      EndUpdateResource(handle, False);
      RaiseLastOSError;
    end;

    if VerQueryValue(datos, '\', Pointer(ptr), len) then
    begin
      Move(ptr^, info, sizeof(info));

      info.dwFileVersionMS := nuevaVersionInt;
      info.dwFileVersionLS := nuevaVersionInt;

      Move(info, ptr^, sizeof(info));
    end
    else
    begin
      errorCode := GetLastError;
      ShowMessage('VerQueryValue Error: ' + IntToStr(errorCode));
      EndUpdateResource(handle, False);
      RaiseLastOSError;
    end;

    if not EndUpdateResource(handle, False) then
    begin
      errorCode := GetLastError;
      ShowMessage('EndUpdateResource Error: ' + IntToStr(errorCode));
      RaiseLastOSError;
    end;
  finally
    FreeMem(datos);
  end;
end;

Lo llamo en el OnClick del botón:
CambiarVersionArchivo('C:\Users\javier\myfile.exe', '6.7.8.9');

Pero me salen los errores:

Primero:

Cita:
· ShowMessage: EndUpdateResource Error: 87
Segundo:

Cita:
· Excepción: A call to an OS function failed
¿ Qué puede pasar ?

Última edición por dec fecha: 26-10-2023 a las 11:15:36. Razón: Poner etiquetas DELPHI y QUOTE
Responder Con Cita