当然可以!用api函数进行copy,然后删除自己
解决方案 »
- 如何控制EDIT文本框内输入的数字,当有小数时,小数点后只能输入一位小数
- VBA中的选项按钮如何判断当前选项是否被选中,解决问题100相送!
- 请有经验人事有空记得来这里谈谈你们对考《程序员》的一些忠告。
- 怎样模拟鼠标和键盘在下面表单中输入地区名称,最好有源码
- 怎么将ImageList与ListView绑定呢!急用!!!
- 串口通讯的问题,传输方式为字节方式,如何保证能接收到所有的命令返回呢?
- 关于编译后进行发布的问题.
- [求助]这是怎么回事啊?
- 我这里有个webService接口地址,程序中如何调用它啊
- 一些VB的小问题
- 请指教:用VB编程,不用文件系统对象,如何实现类同“资源管理器”形式的驱动器及文件列表?
- 看看这段代码,为什么可以把EXCEL 2000中数据倒入ACCESS97,但是不能倒入ACCESS 2000?该如何处理呢?
1、运行A,选择升级,A则拷贝B到A所在的目录下的Updata目录中
2、从A中启动B,通过命令行传递一个参数给B
3、A退出
4、B接收参数后运行,开始拷贝自己到A所在目录,覆盖A
5、结束后,B通过命令行传递一个参数给新的A,运行它
6、B退出。
这时,A就是更新后的拉!
shell("b.exe 参数")
end在B中:
shell("copy a_1.exe a.exe")?
返回命令行的参数部分,该命令行用于装入 Microsoft Visual Basic 或 Visual Basic 开发的可执行程序。语法Command说明当从命令行装入 Visual Basic 时,/cmd 之后的命令行的任何部分作为命令行的参数传递给程序。下面的示例中,cmdlineargs 代表 Command 函数返回的参数信息。VB /cmd cmdlineargs对于使用 Visual Basic 开发并编译为 .exe 文件的应用程序,Command 返回出现在命令行中应用程序名之后的任何参数。例如:MyApp cmdlineargs想知道如何在正在使用的应用程序的用户界面中改变命令行参数,请搜寻关于“命令行参数”的帮助。
本示例在某个函数中用 Command 函数获得命令行参数,并将命令行参数以 Variant 类型之数组返回。Function GetCommandLine(Optional MaxArgs)
'声明变量。
Dim C, CmdLine, CmdLnLen, InArg, I, NumArgs
'检查是否提供了 MaxArgs 参数。
If IsMissing(MaxArgs) Then MaxArgs = 10
' 使数组的大小合适。
ReDim ArgArray(MaxArgs)
NumArgs = 0: InArg = False
'取得命令行参数。
CmdLine = Command()
CmdLnLen = Len(CmdLine)
'以一次一个字符的方式取出命令行参数。
For I = 1 To CmdLnLen
C = Mid(CmdLine, I, 1)
'检测是否为 space 或 tab。
If (C <> " " And C <> vbTab) Then
'若既不是 space 键,也不是 tab 键,
'则检测是否为参数内含之字符。
If Not InArg Then
'新的参数。
'检测参数是否过多。
If NumArgs = MaxArgs Then Exit For
NumArgs = NumArgs + 1
InArg = True
End If
'将字符连接到当前参数中。
ArgArray(NumArgs) = ArgArray(NumArgs) & C
Else
'找到 space 或 tab。
'将 InArg 标志设置成 False。
InArg = False
End If
Next I
'调整数组大小使其刚好符合参数个数。
ReDim Preserve ArgArray(NumArgs)
'将数组返回。
GetCommandLine = ArgArray()
End Function
试试下面代码,看看能不能复制?Option Explicit
Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As LongPrivate Sub Form_Load()
If Right(App.Path, 1) <> "\" Then
CopyFile App.Path & "\" & App.EXEName & ".exe", App.Path & "\" & "ddd.exe", 0
Else
CopyFile App.Path & App.EXEName & ".exe", App.Path & "ddd.exe", 0
End IfEnd Sub
你是不是没有理解大家的意思啊?如果这样,还不如直接用VB的FileCopy呢!
再在退出时写一批处理文件,并同时运行批处理文件来删除B自己
这样不就更新了吗?
TO:ByTheWay(到此一游)
不知道修改B自己这样行不行?没试过!
CopyFile App.Path & "\" & "ddd.exe", App.Path & "\" & App.EXEName & ".exe", 0
才对。但是程序执行后,既不报错,也没有任何改变。
当然可以!用api函数进行copy,然后删除自己 不就是这个意思?
其实偶们都理解错了,偶上面这句化的意思就是这样,而你们理解成"覆盖正在运行的的程序"
竟然还要shell("copy")!?
还有CopyFile的!?
大家能不能先学好基本I/O函数!
在VB中拷贝的函数是:FileCopy "FileName","FileName"!
好象只有当自己也为.bat时才可以
1、程序打开后检查命令行,如果为空,将自身拷贝到某个目录,
2、执行这个目录下的副本,并传递命令行,原EXE程序退出。
3、副本判断如果命令行不为空,且符合某一规范,则程序idle几秒钟,等待原EXE的退出(或者你在原EXE文件退出前向副本进程发送某条自定义消息以通知副本则更好)。
4、之后副本删除原EXE文件(你可以在命令行中传递原EXE文件的路径),由于此时原EXE进程已退出,该文件已解除锁定。
其实偶们都理解错了,偶上面这句化的意思就是这样,而你们理解成"覆盖正在运行的的程序"
哈哈!当然你怎么说都可以拉!我们又不是你肚子里的蛔虫,怎么会知道你老人家简单的一句话会包含如此深奥的道理呢!不过我相信如果没有你后面的解释,十个看的人里有八个都会和我一样看不懂! 哈哈哈哈!
美中不足的是:
1 2_1.exe不能启动太快,得让2_0.exe完全退出才行。
2 更新后的程序运行后,不能处于最大化状态。
1、最好是通过 SuB Main 启动,这样2_1.exe启动后,可以在内存中查找2_0.exe是否完全退出了,如果是,再开始复制,不是则等待;
2、不理解你的意思,为什么不能最大化?
2 已经解决,是shell的问题。
去那里看看有TTs的控件
等系统下次启动
或参照罗云彬网站上的自己删除自己的一段小代码
是在Windows 下的那个吗?
这个函数可以复制自身。具体可查找MSDN
filename1=filename2……
就搞定了!!
还有一个方法,是在 LU0的主页上发现的,可以在程序中用一小段汇编程序关闭自己文件的句柄,然后就可以为所欲为了。不过我没试过。
to:runrunrun(一条不会游泳的鱼) 贴出来,送你200分!!!