cslover 发表于 2009-10-27 16:13:17

刷新也可以吧,反正他的要求是不让引诱机器人的时间不能太长。。。
HLSW来重启是最好了,其他R版早点搞出来。

阿龙哥哥 发表于 2009-11-15 20:23:04

本帖最后由 阿龙哥哥 于 2009-11-15 20:32 编辑

是WIN的系统吗?是的话这个很简单系统自己就带,在计划任务里运行
C:\WINDOWS\system32\shutdown.exe -r -t 00
然后设置启动的时间就可以了。。

我目前都是让服务器每天启动一次,你想过几个小时启动好象要在高级设置里选者重复任务,把持续时间选为99999,印象里好象是这样设置。。

lovehuai 发表于 2009-11-23 01:23:56

WIndows自带定时计划
写个批处理然后加到定时计划里
先结束进程然后ping 127.0.0.1 3-5次再去重新开启就行了

lovehuai 发表于 2009-11-23 02:05:54

本帖最后由 lovehuai 于 2009-11-23 02:08 编辑

Ps:要放到hlds的同目录下不然就在txt里加上hlds的路径
写了个小东西来实现CMD下启动
启动参数 HlRun.exe /r 300 hlds.txt
/r 启动
300 每隔300分钟 5个小时重启
hlds.txthlds的启动参数可以非TXT格式




下面是源码
编辑环境 Win Xp Sp3 + Delphi7program HlRun;

{$APPTYPE CONSOLE}

uses
Windows,
TLhelp32;

var
Msg:Tmsg;
Time:Integer;
Run:DWORD;
Temp:String;
RInc:Integer;

Function StrToInt(S: String): Integer;
Var
E: Integer;
Begin
Val(S, Result, E);
End;

Function IntToStr(I: DWORD): String;
begin
Str(I, Result);
end;

Function LowerCase(const S: string): string;
var
Ch: Char;
L: Integer;
Source, Dest: PChar;
begin
L := Length(S);
SetLength(Result, L);
Source := Pointer(S);
Dest := Pointer(Result);
while L <> 0 do
begin
    Ch := Source^;
    if (Ch >= 'A') and (Ch <= 'Z') then Inc(Ch, 32);
    Dest^ := Ch;
    Inc(Source);
    Inc(Dest);
    Dec(L);
end;
end;

Function Trim(const S: string): string;
var
I, L: Integer;
begin
L := Length(S);
I := 1;
while (I <= L) and (S <= ' ') do Inc(I);
if I > L then Result := '' else
begin
    while S <= ' ' do Dec(L);
    Result := Copy(S, I, L - I + 1);
end;
end;

Function GetPID(_GetPID:String):Dword;   //获取进程PID
var
   h:thandle;
   f:boolean;
   lppe:tprocessentry32;
begin
Result:=0 ;
   h := CreateToolhelp32Snapshot(TH32cs_SnapProcess, 0);
   lppe.dwSize := sizeof(lppe);
   f := Process32First(h, lppe);
   while integer(f) <> 0 do
   begin
       if LowerCase(lppe.szExeFile) = LowerCase(_GetPID) then
       begin
         Result:=(lppe.th32ProcessID);
         break;
       end;
       f := Process32Next(h, lppe);
   end;
end;


Function KillProcess(dwPID: DWORD):Boolean;
var
ProcessHandle: THandle;
begin
ProcessHandle := OpenProcess(PROCESS_TERMINATE, False, dwPID);
Result:=TerminateProcess(ProcessHandle, 0);
end;

Function ReadTxt(FileName:String):String;
Var
F : Textfile;
Begin
AssignFile(F, FileName);
Reset(F);
Readln(F,Result);
Closefile(F);
Result:=Trim(Result);
End;

function Hlds():Integer; stdcall;
begin
   KillProcess(GetPID('hlds.exe'));
   Sleep(500);
   //Temp:= 'hlds.exe -game cstrike +servercfgfile MatchMode.cfg -insecure -port 27017 +maxplayers 14 +map de_train +sv_lan 0 -console +ip 192.168.1.111 -noipx -nojoy';
   ifTemp <> '' then
   begin
            WinExec(PChar(Temp),SW_SHOW);
   end;
   Inc(RInc);
   Writeln('当前启动次数:' + IntToStr(RInc));
   Result := 0;
end;

procedure TimerProc(hwnd:HWND;uMsg,idEvent:UINT;dwTime:DWORD); stdcall;
begin
    CreateThread(nil , 0, @Hlds, nil, 0, Run);
end;

begin
if ParamStr(1) = '/r' then
begin
   Time:=StrToInt(ParamStr(2));
   Writeln('重启间隔:' + ParamStr(2) + ' 分钟');
   Temp:=ReadTxt(ParamStr(3));
   Writeln('启动参数:' + Temp);
   RInc:=0;
   Hlds;
   Sleep(100);
   SetTimer(0,100001,(Time * 60 *1000),@TimerProc);
   while GetMessage(Msg,0,0,0) do
   begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
   end;
end;

end.

心静如水 发表于 2009-11-23 22:15:11

谢谢.....................

点通粉丝 发表于 2009-11-24 08:18:11

我怎么感觉现在点通为一可学东西只有这个区的啦..晕呀

qzdisk 发表于 2009-11-25 12:46:31

哈哈!!!!!!

xywl2d 发表于 2009-12-3 12:28:55

好帖子{:3_64:}

shuyeshuye 发表于 2009-12-3 16:52:13

高手就是高手

colaawp 发表于 2010-1-14 05:27:27

也可以利用一下系统自带的计划任务。。~~~~
直接把机器重启...重启后HLSM会自动运行并再启动CS端...
页: 1 [2] 3
查看完整版本: 请问让服务器运行达5小时自动重起的代码如何写呢?