在数据库里面有一个更新路径字段,各客户端如发现自身与服务器上的exe文件不一致,即自动更新。
我是这样写的:
'是否需要更新
'得到更新路径
SQLstring = "select UPDataPath from YHSysData where 1=1"
Dim Rs As New ADODB.Recordset
Set Rs = SQL.ExecQuery(SQLstring)
If Rs.EOF Then
MsgBox "您未设定更新路径!"
Else
Dim FSO As New FileSystemObject
If FSO.FileExists(Rs!UpDataPath & "") = False Then
MsgBox "您未设定文件更新源或更新源不存在!有可能您使用的是旧版ERP系统,请与软件服务商联系!"
Else
'得到服务器文件的修改日期
Dim F_UpExeDate As String
Dim F_MeExeDate As String
F_UpExeDate = FileDateTime(Rs!UpDataPath & "")
On Error Resume Next
F_MeExeDate = FileDateTime(App.Path & "\" & App.EXEName & ".exe")
If F_UpExeDate <> F_MeExeDate Then
If MsgBox("发现有新版本,是否立即更新?", vbInformation + vbYesNo, "提示") = vbYes Then
'得到旧文件名及地址
Dim F_Old As String
F_Old = App.Path & "\" & App.EXEName & ".exe"
'查看文件是否存在
If FSO.FileExists(App.Path & "\" & Format(F_MeExeDate, "YYYYMMDDhhmmss") & ".exe") = True Then
Kill (App.Path & "\" & Format(F_MeExeDate, "YYYYMMDDhhmmss") & ".exe")
End If
'修改文件名
Name F_Old As App.Path & "\" & Format(F_MeExeDate, "YYYYMMDDhhmmss") & ".exe"
'将新文件COPY上来
FileCopy Rs!UpDataPath & "", F_Old
MsgBox "更新完毕!请重新打开ERP!"
Unload Me
Exit Sub
End If
End If
End If
End If测试通过了,但很烦的一个问题:当我在运行工程的时候,会出错。大家讨论一下,该怎么解决呢?我怎么来判断当前是运行工程还是运行EXE?
我是这样写的:
'是否需要更新
'得到更新路径
SQLstring = "select UPDataPath from YHSysData where 1=1"
Dim Rs As New ADODB.Recordset
Set Rs = SQL.ExecQuery(SQLstring)
If Rs.EOF Then
MsgBox "您未设定更新路径!"
Else
Dim FSO As New FileSystemObject
If FSO.FileExists(Rs!UpDataPath & "") = False Then
MsgBox "您未设定文件更新源或更新源不存在!有可能您使用的是旧版ERP系统,请与软件服务商联系!"
Else
'得到服务器文件的修改日期
Dim F_UpExeDate As String
Dim F_MeExeDate As String
F_UpExeDate = FileDateTime(Rs!UpDataPath & "")
On Error Resume Next
F_MeExeDate = FileDateTime(App.Path & "\" & App.EXEName & ".exe")
If F_UpExeDate <> F_MeExeDate Then
If MsgBox("发现有新版本,是否立即更新?", vbInformation + vbYesNo, "提示") = vbYes Then
'得到旧文件名及地址
Dim F_Old As String
F_Old = App.Path & "\" & App.EXEName & ".exe"
'查看文件是否存在
If FSO.FileExists(App.Path & "\" & Format(F_MeExeDate, "YYYYMMDDhhmmss") & ".exe") = True Then
Kill (App.Path & "\" & Format(F_MeExeDate, "YYYYMMDDhhmmss") & ".exe")
End If
'修改文件名
Name F_Old As App.Path & "\" & Format(F_MeExeDate, "YYYYMMDDhhmmss") & ".exe"
'将新文件COPY上来
FileCopy Rs!UpDataPath & "", F_Old
MsgBox "更新完毕!请重新打开ERP!"
Unload Me
Exit Sub
End If
End If
End If
End If测试通过了,但很烦的一个问题:当我在运行工程的时候,会出错。大家讨论一下,该怎么解决呢?我怎么来判断当前是运行工程还是运行EXE?
解决方案 »
- 我想让 Command1 1秒点击一次。Timer1_Timer()中如何写呀
- 如何在richTextBox最后一行,加一条蓝色的一行,然后再把这行删掉(点按钮才删),注意只是最后一行
- vb6能否访问和操作MS SQL Server 2000数据库(如数据库*.mdf),能给个完整的框架例子吗?谢谢!
- VB中有没有控件可以做出MSN或者QQ窗口中左边那一列的TAB按钮来啊,请达人帮助!
- 水晶报表如何实现按照参数动态排序,给高分,先谢谢了,很急!!!
- VB与数据库连接不上···老报错是:错误91 有没有人可以帮个忙看看啊?谢啦!!!
- COM與COM+對象的概念與區別?
- 急!高分求救,一个关于VB删除SQL Server 库表记录的问题。
- >>>>>>>>>========VB高手请进======<<<<<<<<<<<<<<<<<<
- 怎样用picture box显示资源文件中的一张.gif图片?
- vb函数调用问题
- $u5C0F代表了一个汉字"小", 这是什么编码?怎么编?
on error goto err1
debug.print 1/0
exit function
err1:
err.clear
InIDE=true
end function
一般都是采用这种方法,但是这样必须将更新的那个程序放在同一目录下,而我因为可以随时把ERP.exe复制到任何位置进行打开,故有可能用户不会把更新的文件放在一起。如果解决了在运行工程的时候出错的问题(zzyong00 已解决),那么我的方案似乎可行,大家再提意见
1.判断是否更新
2.修改自己的文件名作备份
3.将最新的COPY到本地,由于旧的文件的文件名被修改,故不会提示有人在使用无法覆盖
4.关闭旧的打开新的(好像这地方会出错,我在打开ERP的时候会判断是否已经打开,我采用shell打开新的一直会提示已经打开,虽然旧的我已经unload 了
unload me
shell 新的
exit sub
把路径写到ini文件或者注册表里面,更新的时候读一下就知道更新的文件在哪里了
这个帖子中有好几种方法都可以判断当前是否在VB IDE环境下
'* 程序名称:DelMe.bas
'* 程序功能:在VB中实现应用程序自删除
'* 作者:lyserver
'* 联系方式:http://blog.csdn.net/lyserver
'* ******************************************************* *Sub Main()
Call DelMe
End SubPublic Sub DelMe()
Dim fn As Integer
If App.LogMode Then
fn = FreeFile()
Open "del.tmp.vbs" For Output As fn
Print #fn, "Dim FSO,WMI"
Print #fn, "Set WMI=GetObject(" & Chr(34) & "winmgmts:\\." & Chr(34) & ")"
Print #fn, "Set FSO=CreateObject(" & Chr(34) & "Scripting.FileSystemObject" & Chr(34) & ")"
Print #fn, "Do While WMI.ExecQuery(" & Chr(34) & _
"SELECT * FROM WIN32_PROCESS WHERE NAME='" & App.EXEName & ".EXE'" & Chr(34) & ").Count"
Print #fn, "WScript.Sleep 1"
Print #fn, "Loop"
Print #fn, "FSO.DeleteFile " & Chr(34) & App.Path & "\"; App.EXEName & ".EXE" & Chr(34)
Print #fn, "FSO.DeleteFile " & Chr(34) & App.Path & "\del.tmp.vbs" & Chr(34)
Print #fn, "Set FSO=Nothing"
Print #fn, "Set WMI=Nothing"
Close #fn
Shell "WScript.Exe del.tmp.vbs", vbHide
End If
End Sub