Набросал консольную прогу для чека апдейтов, авось пригодится.
Код:
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,windows,classes,idhttp,shellapi;
function AnsiContainsText(const AText, ASubText: string): Boolean;
begin
Result := AnsiPos(AnsiUppercase(ASubText), AnsiUppercase(AText)) > 0;
end;
function checkupdates:String;
var
HTTP: TIdHTTP;
my: String;
buffer,f:Tstringlist;
begin
f:=Tstringlist.Create;
buffer:=Tstringlist.Create;
HTTP:= TIdHTTP.Create;
if not fileexists('vers.txt') then begin
f.Text:='13628';
f.SaveToFile('vers.txt');
end;
f.LoadFromFile('vers.txt');
my:=f.Text;
try
Buffer.text:= HTTP.Get( 'http://api.steampowered.com/ISteamApps/UpToDateCheck/v1?appid=730&version=' +trim(my) + '&format=xml');
except
exit;
end;
my:= System.SysUtils.StringReplace(buffer[6], '<required_version>', '', [rfReplaceAll]);
my:= System.SysUtils.StringReplace(my, '</required_version>', '', [rfReplaceAll]);
if AnsiContainsText(buffer[4],'<up_to_date>false') then begin
writeln('need update! send taskkill to srcds.exe');
ShellExecute(0,'open', PChar('cmd.exe'), Pchar('/c taskkill /IM srcds.exe /f'),'',SW_HIDE);
f.Text:=trim(my);
writeln(f.Text);
f.SaveToFile('vers.txt');
end
else if AnsiContainsText(buffer[4],'<up_to_date>true') then begin
writeln('already latest version!');
end;
f.Free;
buffer.Free;
http.Free;
end;
begin
checkupdates;
sleep(3000);
end.
примечание, при наличии апдейта она шлет taskkill а в батнике запуска должно быть чтото типа
start /wait f:/updater/steamcmd.exe +login anonymous +force_install_dir F:\server27015 +app_update 740 +quit
REG DELETE HKCU\Software\Valve\Steam\ActiveProcess /v SteamClientDll /f
start /wait "" F:\server27015\revloader.exe
и да процедура вместо функции, но влом.
Отредактировал: csnet, - 2.3.2018, 3:49