我想做自升级程序,当应用程序运行时,先远程服务器连接,如果有新版本就自己下载并覆盖自己,然后继续运行更新后的应用程序!但我不想用另一个应用程序来更新升级程序,也就是说程序能进入内存,对该文件的写操作都没关系!!

解决方案 »

  1.   

    不可能,程序不可能状态一样,你必须完全停止对一个文件的操作后,另一个程序才能操作这个文件,即文件在运行时是只读的,如你正在写一个TXT文件,你对它进行操作时就会提示你文件已经打开
      

  2.   

    '版本检查及更新过程
    Private Sub ExeRefresh()
    '定义四个临时字符串变量
    Dim s1 As String
    Dim s2 As String
    Dim s3 As String
    Dim s4 As String
    On Error Resume Next
    '将本地应用程序MyApp.EXE的全路径名存入 s1
    '将本地中介程序FastCopy.exe的全路径名存入 s3
    s1 = "TNT"
    If Len(appPath) > 3 Then
        s1 = appPath + Trim(app_name1) + ".exe"
        s3 = appPath + midexename1 + ".EXE"
    Else
        s1 = appPath + Trim(app_name1) + ".exe"
        s3 = appPath + midexename1 + ".EXE"
    End If
    s4 = "TNT"
    '将本地应用程序MyApp.EXE文件的修改时间存入 s4
    s4 = FileDateTime(s1)
    s2 = "TNT"
    '将网络上应用程序MyApp.EXE文件的修改时间存入 s2
    s2 = FileDateTime(exepath1 + app_name1 + ".EXE")
    If s2 = "TNT" Then
        MsgBox "没有找到最新的可执行文件:" + exepath1 + app_name1 + ".EXE" _
        + vbCrLf + vbCrLf + "原因1:存放最新EXE的服务器或者工作站没有打开;" _
        + vbCrLf + "原因2:存放最新EXE的路径错误或者EXE文件不存在;" _
        + vbCrLf + "请将此情况通知程序员." + vbCrLf + vbCrLf _
        + vbCrLf + "按确定按钮后,将继续运行本地EXE文件.", vbCritical, "提示"
    End If
    If s2 = "TNT" Or s4 = "TNT" Then Exit Sub
    '如果网络上应用程序MyApp.EXE文件的修改时间,大于本地MyApp.EXE文件的修改时间
    '然后再运行本地MyApp.EXE ,中介程序退出后,整个更新过程结束.
    If CDate(s2) > CDate(s4) Then
        '将网络上的中介程序FastCopy.exe复制到本地,这样可防止本地无中介程序时无法进行更新
        FileCopy exepath1 + midexename1 + ".EXE", s3
        '则运行中介程序FastCopy.exe ,将最新的MyApp.EXE 复制到本地
        s1 = Shell(s3 + " " + exepath1 + "," + app_name1 + ".EXE", vbNormalFocus)
        '本地应用程序MyApp.EXE 终止运行,否则已经更新的MyApp.EXE无法覆盖本地的MyApp.EXE .
        End
    End If
    End Sub
    '将以上程序编译为:MyApp.exe 存储在共享目录中.
    试试吧,