找回密码
 加入
搜索
查看: 6341|回复: 14

[系统综合] 远程更新软件并运行

  [复制链接]
发表于 2011-9-14 20:32:07 | 显示全部楼层 |阅读模式
本帖最后由 xms77 于 2011-9-14 20:34 编辑

比如我有50台电脑,上面运行一个客户端程序,现在我要升级该客户端程序,能否让所有客户端程序终止,然后把升级版的客户端程序发送到50台电脑,然后再运行该客户端程序?
先说一下,我现在实现的方法:
1. 50台电脑都有一个相同路径和名称的共享文件夹,客户端程序是自己编写的,放在这个共享文件夹中,随系统启动运行。
2. 如何让客户端程序终止?客户端程序会检测共享文件夹中是否存在on_off.swh这个文件名,如果有,那么先运行一个assistant.exe的程序,然后自身终止运行
3. assistant.exe的小程序专门扫描共享文件夹是否存在on_off.swh1这个文件名,如果有,那么就运行客户端程序,然后自身终止运行。
4. 通过发送或删除on_off.swh和on_off.sw1来控制客户端程序的运行和终止。
这是一个笨办法,目前想不出什么更好的办法实现我要的功能,不知道还没有简单的方法来实现这个功能?本人对远程的东西不是很了解。
发表于 2011-9-14 20:48:39 | 显示全部楼层
用tcp通信
帮助中的例子:

;服务器!! 请先运行我 !!!!!!!!!!!!!!!
$g_IP = "127.0.0.1"

; 开始 TCP 服务
;==============================================
TCPStartUp()

; 创建监听套接字("SOCKET")
;==============================================
$MainSocket = TCPListen($g_IP, 65432,  100 )
If $MainSocket = -1 Then Exit

;  等待客户端连接
;--------------------
While 1
$ConnectedSocket = TCPAccept( $MainSocket)
If $ConnectedSocket >= 0 Then
    msgbox(0,"","我的服务器 - 客户端已连接")
    exit
EndIf
Wend


发表于 2011-9-15 00:15:23 | 显示全部楼层
请问客户端的程序是你自己写的吗?如果是自己写的就好办!
 楼主| 发表于 2011-9-15 08:51:01 | 显示全部楼层
回复 3# hzxymkb
是自己写的,有什么好办法?
发表于 2011-9-15 10:59:42 | 显示全部楼层
写成批处理来运行
 楼主| 发表于 2011-9-15 12:20:03 | 显示全部楼层
回复 5# xwt620
批处理不知道怎么实现
发表于 2011-9-15 12:36:22 | 显示全部楼层
本帖最后由 骗子 于 2011-9-15 12:44 编辑

自己抄袭修改的一个网络升级程序,在客户端的程序中开头加入run 或者runwait



#NoTrayIcon
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_Icon=F:\My DBank\autoit3\2012   8.9\汽车工厂\登陆辅助\up.ico
#AutoIt3Wrapper_OutFile=更新程序.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Comment=辅助更新程序,更换图标
#AutoIt3Wrapper_Res_Description=不想使用自动更新功能可将此程序删除
#AutoIt3Wrapper_Res_LegalCopyright=medoclub.taobao.com
#AutoIt3Wrapper_Run_Tidy=y
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/striponly /cv 1
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#Region AutoIt3Wrapper 预编译参数(常用参数)
;~ #AutoIt3Wrapper_Res_FileVersion=0.9.0.6
;~ #AutoIt3Wrapper_Res_FileVersion_AutoIncrement=n
#EndRegion AutoIt3Wrapper 预编译参数(常用参数)


;;;;;这部分是判断升级的,可以用各种方法想办法去服务器上获取内容,我抄袭的是用获取HTTP服务器上的文件大小来判断是否升级的
Local $size1 = InetGetSize("http://gamewfj.qiongz.com/更新说明.txt")
Local $size2 = FileGetSize("更新说明.txt") ;本机当前目录文件大小
If $size1 = 0 Then Exit
If $size1 > $size2 Then ;对比两个文件的大小,不一样就显示升级确认框
        If MsgBox(68, "检测到新版本", "是否升级") = 6 Then _shengji()
EndIf

Func _shengji()
        Local $hDownload = InetGet("http://gamewfj.qiongz.com/小号登陆辅助V0.9.exe", @TempDir & "\" & @MDAY & @HOUR & "temp.exe", 1, 1) ;下载客户端程序
        Local $hDownload1 = InetGet("http://gamewfj.qiongz.com/更新说明.txt", @TempDir & "\" & @MDAY & @HOUR & "更新说明.txt", 1, 1) ;下载更新说明,这个一方面是说明,另一方面是否升级判断文件大小的一个依据
        Do
                Sleep(250)
        Until InetGetInfo($hDownload, 2) And InetGetInfo($hDownload1, 2) ; 检查下载是否完成.
        Local $nBytes = InetGetInfo($hDownload, 0)
        InetClose($hDownload) ; 关闭句柄,释放资源.
        InetClose($hDownload1) ; 关闭句柄,释放资源.
        If MsgBox(68, "下载完毕", "是否立即升级") = 6 Then 
                WinClose("防止重复运行iopqauto.exe") ;关闭客户端,这个是通过标题关的,应该有更好的方法
                Sleep(1000)
                FileMove(@TempDir & "\" & @MDAY & @HOUR & "更新说明.txt", @ScriptDir & "\更新说明.txt", 9) ;将下载下来的文件复制到升级程序的目录下,实现升级
                FileMove(@TempDir & "\" & @MDAY & @HOUR & "temp.exe", @ScriptDir & "\小号登陆辅助V0.9.exe", 9)
                MsgBox(4096, "升级完毕", "开始享受吧", 5)
                Run("小号登陆辅助V0.9.exe") ;运行客户端程序
        EndIf
EndFunc   ;==>_shengji


发表于 2011-9-15 12:39:39 | 显示全部楼层
可以考虑稍微修改一下,在服务器上起HTTP服务器或者FTP服务器或者直接开文件共享
客户端的升级程序想办法去获取升级文件,读取内容,判断是否升级。
如果需升级就将升级文件用各种办法下载到本机,结束客户端程序,完成升级,运行客户端
发表于 2011-9-15 13:03:05 | 显示全部楼层
回复 4# xms77


    自己写的当然有办法啦。让程序下载完新程序之后改名后自杀就行了
发表于 2011-9-15 14:34:52 | 显示全部楼层
回复 6# xms77


    可以参考超强QQ农场外挂的安装程序
其实用AU3实现也很简单
 楼主| 发表于 2011-9-15 14:41:41 | 显示全部楼层
回复 8# 骗子
谢谢,其实我这里是客户端程序不检测是否需要升级的,完全是我服务器这里主动要求升级的,服务器直接发送升级的客户端程序到客户端电脑的共享文件夹中的。没有这么复杂!
 楼主| 发表于 2011-9-15 14:45:22 | 显示全部楼层
回复 9# hzxymkb
谢谢,其实我这里是客户端程序不检测是否需要升级的,完全是我服务器这里主动要求升级的,服务器直接发送升级的客户端程序到客户端电脑的共享文件夹中的。
发表于 2011-9-15 20:48:45 | 显示全部楼层
回复 11# xms77

百度了一个命令行远程关机的命令,改改应该能实现你的需求
@echo off
net use \\192.168168.168\ipc$ "999999" /user:"administrator" >nul 2>nul
shutdown /s /t 0 /f  /m \\192.168168.168  /d p:4:1 >nul 2>nul
发表于 2011-9-15 21:43:49 | 显示全部楼层
回复 12# xms77


    客户端可以通过监控服务器某个命令,如果有命令的话就进行更新,没有就不更新不是行咯!
 楼主| 发表于 2011-9-16 08:20:06 | 显示全部楼层
回复 14# hzxymkb
昨天研究了一下TCP/UDP函数,貌似可以实现如此功能
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 10:17 , Processed in 0.129790 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表