例如:
我用VB写了一个(计算器程序)生成了(计算器.exe)
我又用VB写了一个(计算器程序,并且给里面添加了很多功能)生成了(更新计算器.exe)
。。
怎样实现当你双击,更新计算器.exe的时候,就将原来计算器.exe 覆盖
然后你运行计算器.exe显示的是被覆盖过的(也就是显示的是更新计算器.exe)。

解决方案 »

  1.   

    如果exe运行了,那不可能更新了。
    不然可以通过版本检测等
      

  2.   

    一般的做法是写一个update.exe来执行.Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongConst WM_CLOSE = &H10
    Private Sub Command1_Click()
    Dim WindowHwnd As LongWindowHwnd = FindWindow(vbNullString, "你程序的标题")
    If WindowHwnd <> 0 Then PostMessage WindowHwnd, WM_CLOSE, 0&, 0&'如果程序已经打开就关闭它
    If Dir(App.Path & "\计算器.exe") <> "" Then Kill App.Path & "\计算器.exe"
    If Dir(App.Path & "\更新计算器.exe") <> "" Then
        FileCopy App.Path & "\更新计算器.exe", App.Path & "\计算器.exe"
        MsgBox "升级完成."
        shell  App.Path & "\计算器.exe"'重新打开
    Else
        MsgBox "更新计算器.exe不存在"
    End IfEnd Sub
      

  3.   

    同意   tztz520(午夜逛街)
      

  4.   

    就一个.EXE文件的这种程序说到底就是先删除,在复制的一个过程!
      

  5.   

    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongConst WM_CLOSE = &H10
    Private Sub Command1_Click()
    Dim WindowHwnd As LongWindowHwnd = FindWindow(vbNullString, "你程序的标题")
    If WindowHwnd <> 0 Then PostMessage WindowHwnd, WM_CLOSE, 0&, 0&'如果程序已经打开就关闭它
    If Dir(App.Path & "\计算器.exe") <> "" Then Kill App.Path & "\计算器.exe"
    If Dir(App.Path & "\更新计算器.exe") <> "" Then
        FileCopy App.Path & "\更新计算器.exe", App.Path & "\计算器.exe"
        MsgBox "升级完成."
        shell  App.Path & "\计算器.exe"'重新打开
    Else
        MsgBox "更新计算器.exe不存在"
    End IfEnd Sub
    这个不错!
    你试试!
      

  6.   

    但是还是先检测一下更新计算器.exe存不存在,否则如果不存在,不白白删掉计算器.exe关注!!!
      

  7.   

    update设计思路:
    先运行update,update检查新的main文件是否存在,如存在将文件读入到temp文件里,再将旧的main文件删除,将temp文件命名为main,运行更新后的main文件,关闭update。
    update成功!(期间如有错误都不会影响文件的完整性)
      

  8.   

    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongConst WM_CLOSE = &H10
    Private Sub Command1_Click()
    Dim WindowHwnd As LongWindowHwnd = FindWindow(vbNullString, "你程序的标题")
    If WindowHwnd <> 0 Then PostMessage WindowHwnd, WM_CLOSE, 0&, 0&'如果程序已经打开就关闭它
    If Dir(App.Path & "\计算器.exe") <> "" Then Kill App.Path & "\计算器.exe"
    If Dir(App.Path & "\更新计算器.exe") <> "" Then
        FileCopy App.Path & "\更新计算器.exe", App.Path & "\计算器.exe"
        MsgBox "升级完成."
        shell  App.Path & "\计算器.exe"'重新打开
    Else
        MsgBox "更新计算器.exe不存在"
    End IfEnd Sub
    ..............................你把代码放在 Command1_Click()
    那就还的给更新计算器上加一个命令按扭(我想什么也不给它添加)
    更新完了这段代码还在被更新过的计算器里面(怎么将它去掉)
    ‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘
    我想做(更新的程序)它是一个中间程序让它把旧的更新成新的
     ---中间程序就是执行覆盖的--
    而且必须先运行中间程序才能更新
    ’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘'''''''''''''''''''''''''''''''
    我是一个初学者
    谁帮我写一下
    谢谢
    写的都有分
      

  9.   

    用上面的代码写成一个update.exe后.放到程序的目录下.
    在你的程序中直接执行就可以了.
    Private Sub Command1_Click()
     shell app.path & "\update.exe"
    End Sub
      

  10.   

    我看这种算法有些象病毒,万一“更新计算器.exe”还完全写好,一运行,原来虽然功能简单但是能用的程序就没了,呵呵,偶在这里瞎想一下...