原创-捕鱼app

学习.交流
专业源于专注
  
学习交流 文件下载 手册资料 交流qq群

    

 21  1/2         
作者
内容
  


注册  2011-08-18
发贴数  
精华贴  
原创贴  
来自  
状态  正常

级别  版主
#1»发布于2014-02-18 14:41

之前发过一个oit系统的后台服务维护程序,一旦检测到后台服务没运行,或是服务端口没有打开就自动启动服务,实际运行中发现偶尔会有服务器的端口开着,但是客户端连不上的情况,这种情况下维护程序不会重启后台,需要人工干预,去服务器上操作,不太人性化。 
 
基于此,想到了在客户端加入人工重启服务器后台服务的功能。步骤如下: 
 
1、在系统功能--主窗体脚本定义加入如下内容 
     menu_set_hot_key('n_restart','f11',0,0);   //此句作用把切换用户/重新登录加上个快捷键f11,以后有用 
     menu_add_csp('n_top_system',5,'shutdownoit','重启后台服务','shutdownoit.csp');   //此句用来添加一个重启后台服务的菜单,执行的是脚本shutdownoit.csp的脚本集 
     string addre,str2 
     addre=get_home_path() 
     str2='copy \\192.168.0.253\新综合系统完整版\dll\shutdownoit.exe ' 
     system(str2 addre "\dll /y") 
    //上面一段用来每次启动系统的时候,从内网253机器的共享目录\\192.168.0.253\新综合系统完整版\dll上复制一个shutdownoit.exe到本地oit系统执行目录的dll下,地址接实际修改。如果没有新用户,过段时间可以把这行注释掉,下载一次就行了


附件(登录后才可下载):1402181413_08.exe  说明: 原文件:shutdownoit.exe   大小:9728 byte

        于 2014-02-18 14:41 被 awfixtdm 修改




qq:80240800

  


注册  2011-08-18
发贴数  
精华贴  
原创贴  
来自  
状态  正常

级别  版主
#2»发布于2014-02-18 14:32

为什么要自己做第三方程序?不用脚本自身呢,因为一旦服务器端口关闭,客户端跟服务器之前的通道将断开,脚本结果无法传递到服务器,所以我们需要建立一条新的通道,用来通知服务器服务断开了,要重启服务。 
 
接下来我们来说怎么建立一条新的通道。虽然有很多方法可以实现,但是从效率和方便操作上,我选择了数据库。 
 
2、打开sql,打开系统的数据库,新建一个新表,建立一个字段cs,类型为int,保存新表,取名shutdown。把cs填上0 
双击新建立的表shutdown,在触发器上右键 ,新建触发器,复制下面内容后点击执行即可 
 
create trigger [dbo].[shut]  
   on  [hrdb].[dbo].[shutdown] for update as  
begin 
declare @k int 
select @k=cs from inserted 
--print @k 
if @k=1 
begin 
declare @file varchar(100) 
set @file = 'c:\shutdownoit.bat'    
exec master..xp_cmdshell @file 
update [shutdown] set cs='0' 
end 
end 
go


        于 2014-02-18 14:32 被 awfixtdm 修改




qq:80240800

  


注册  2011-08-18
发贴数  
精华贴  
原创贴  
来自  
状态  正常

级别  版主
#3»发布于2014-02-18 14:39

通过上面这个触发器,我们可以理解到它的意义,就是当shutdown表的cs字段发生变化,并且cs的值变成1的时候,就执行c:\shutdownoit.bat的批处理文件,然后又把cs的值改加0。 
 
这里的'c:\shutdownoit.bat'   的批处理,就是我们用来执行重启后台服务的,当然,我们也可以直接写在触发器里,不用建立bat文件。这里我是建了文件,新建一个文本文件,写入下面两行内容,保存,重命名,把文件名改为shutdownoit.bat,扔到c盘根目录,地址也可以随便改,触发器里相应修改 
批处理内容: 
taskkill /f /t /im server.ex 
start "" "e:\hr\oit_setup_20130824\oit_setup\oserver.exe" 
 
第一行是结束后台服务的进程,第二行是运行,路径要修改为你服务器上的路径 
 
至此,第二步完成,当后台断开的时候,只要服务器接收到cs的值变为1,就会重启服务,我们第三步要做的事,就是怎么样把cs的值变为1






qq:80240800

  


注册  2011-08-18
发贴数  
精华贴  
原创贴  
来自  
状态  正常

级别  版主
#4»发布于2014-02-18 15:08

3、进入系统,配置管理,脚本工具,初始化,在main函数中输入如下内容 
 
      inp_clear(); 
     inp_para_set_title('请输入重启后台服务管理密码') 
 
 
  inp_def_string('mnum','重启密码:'); 
 
  inp_para(); 
  num inp_num; 
  inp_num=inp_get_val('mnum') 
  if(inp_num==*****)//设个密码 
  { 
 
     inp_clear(); 
     inp_def_string('mnum1','确定请输入y:'); 
              inp_para_set_title('确认重启后台服务') 
     inp_para(); 
       string qd; 
     qd=inp_get_val('mnum1') 
    if(qd=="y") 
    { 
      msg("后台服务即将重启") 
      string addre 
      addre=get_home_path() 
      system(addre "\dll\shutdownoit.exe 服务器ip 用户名 密码 数据库名") 
 
    } 
    else 
    { 
      msg("输入有误,请重新输入") 
 
    } 
  } 
  else 
  { 
    msg("重启密码错误,请重新输入") 
 
  } 
 
注意上面有一行要自行输入服务器ip,用户名,密码,数据库名,按顺序填入,中间空格隔开 
点击另存为,输入shutdownoit.csp保存。就是第一步骤里重启后台服务菜单的脚本,这段的作用,就是利用shutdownoit.exe程序,实现把数据库里cs参数改为1,让后台重启的。 
 
//注意把其他用户的脚本权限去掉,不然个个能看到数据库信息了 
 
效果如下


        于 2014-02-18 15:08 被 awfixtdm 修改




qq:80240800

  


注册  2011-08-18
发贴数  
精华贴  
原创贴  
来自  
状态  正常

级别  版主
#5»发布于2014-02-18 14:48

为防止误操作,加入了一些验证






qq:80240800

  


注册  2011-08-18
发贴数  
精华贴  
原创贴  
来自  
状态  正常

级别  版主
#6»发布于2014-02-18 14:51

点击确定后,自动重启后台,并重登录回到登录窗口






qq:80240800

  


注册  2011-08-18
发贴数  
精华贴  
原创贴  
来自  
状态  正常

级别  版主
#7»发布于2014-02-19 09:07

这里重登录的功能,就是利用上面第一步中加入的快捷键f11,因为不是在窗体脚本,所以menu_trigger_click函数不起作用,用menu_trigger_click('n_restart')没有反应,触发不了“切换用户/重登录”的菜单。所以改成用了快捷键触发回到登录界面,不用人工再去操作。 
 
至此,客户端重启后台服务功能添加完成,此方法oit各系统通用


        于 2014-02-19 09:07 被 awfixtdm 修改




qq:80240800

  


注册  2011-03-25
发贴数  
精华数  0
原创贴  
来自  温州
状态  正常

级别  贵宾
#8»发布于2014-02-18 18:19

牛逼,膜拜啊




  
qq名  meng


注册  2005-09-20
发贴数  
精华贴  
原创贴  
来自  杭州
状态  正常

级别  版主
#9»发布于2014-02-19 09:14

 
很强,感谢分享






 三生石上旧精魂 赏月吟风莫要论 惭愧情人远相访 此身虽异性长存 

  


注册  2011-08-18
发贴数  
精华贴  
原创贴  
来自  
状态  正常

级别  版主
#10»发布于2014-02-19 14:00

对于从服务器上下载文件到本地的脚本,也可以在数据库里加个表,给每个文件一个参数,然后脚本里判断一下,第一次下载好就顺便db_run写入一行数据标识一下,下次不再重新下载,就不会登录都闪黑框了






qq:80240800

  


注册  2012-07-24
发贴数  
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#11»发布于2014-02-22 08:18

mark 收藏一下先




  
qq名  安徽-大志


注册  2012-12-14
发贴数  
精华贴  
原创贴  
来自  安徽
状态  正常

级别  会员
#12»发布于2014-02-26 21:09

留个记号,有时间深入学习下,谢谢楼主的无私奉献! 






联系qq:729208139    tel:17775227617

  
qq名  常德-zen


注册  2010-04-08
发贴数  
精华贴  
原创贴  
来自  常德-zen
状态  正常

级别  会员
#13»发布于2014-03-05 10:40

多谢楼主共享这么好的经验,收藏了!






官方认证第三方服务团队  蒋逸凡(常德-zen) qq:50636277
服务介绍: http://www.onlyit.cn/user_home?user_id=13498

  


注册  2009-02-09
发贴数  
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#14»发布于2014-03-08 16:25

仅仅是基于局域网,有没有适合互联网的呢




  


注册  2011-08-18
发贴数  
精华贴  
原创贴  
来自  
状态  正常

级别  版主
#15»发布于2014-03-10 11:52

一样用的,没分局域和互联。只要把shutdownoit.exe放到客户端dlll下就行了。






qq:80240800


 21  1/2         


登录后方可发贴


[ 电话: 0571-85462761 王先生 qq: 124520435 加入软件qq群 - - ]