以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于小版本更新外部引用DLL  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=51190)

--  作者:guoweidong
--  发布时间:2014/5/21 15:48:00
--  关于小版本更新外部引用DLL
Dim CurrPath As String = System.IO.Directory.GetCurrentDirectory()
Dim Dll As String = CurrPath & "\\project\\dll"
If System.IO.Directory.Exists(Dll) Then
    For Each filenames As String In System.IO.Directory.GetFiles(Dll)
        System.IO.File.Copy(filenames, filenames.Replace("\\project\\dll", ""), True)
        System.IO.File.Delete(filenames)
    Next
    System.IO.Directory.Delete(Dll)
End If


这段处理更新DLL会出现一个问题,一是当应用程序未关闭的情况下,复制文件会失败,导致更新失败,还有种情况就是文件未复制完整也会导致失败,这块应如何处理?


其实主要原因在于,我在全局中调用了DLL变量,所以在每次更新这个DLL和启动发现了冲突,全局变量中的调用好像是在beforeopenproject之前就开始执行了。没法再做前一步的处理了,这样的情况下,狐表目前是真的没办法处理了吗?所谓的使用bat做更新,都是浮云了,只能从第三方更新先做检测了,只是感觉这样也不是什么最好的方法,我还是比较喜欢只用一个程序去做处理。
[此贴子已经被作者于2014-5-22 11:00:44编辑过]

--  作者:Bin
--  发布时间:2014/5/21 15:49:00
--  
没什么好方法,强制关闭该第三方程序呗
--  作者:guoweidong
--  发布时间:2014/5/21 15:51:00
--  
强制关闭又找不到第三方程序进程名,用的都是同一个进程名 foxtable.exe ,因为用狐表做的不只一个应用,总不可能都强制关了吧。
[此贴子已经被作者于2014-5-21 15:51:27编辑过]

--  作者:有点甜
--  发布时间:2014/5/21 15:53:00
--  

 换一种思路,

 

 如果它放在dll_1文件夹下,

 

 更新的时候,就把它放在比如dll_2文件夹下,适当的时候,把原来的文件夹。


--  作者:guoweidong
--  发布时间:2014/5/21 15:53:00
--  
最坑的是,更新失败后就不能继续再更新了,内核的版本已更新了,可DLL编译失败了!
--  作者:guoweidong
--  发布时间:2014/5/21 15:55:00
--  

更新就从DLL目录下复制到应用根目录的,当首次打开的时候把DLL目录里的文件复制到根目录再删了DLL里的文件的。


--  作者:有点甜
--  发布时间:2014/5/21 15:56:00
--  

 又或者,直接运行bat文件,强制关闭foxtable,然后在bat里面写代码拷贝更新。


--  作者:guoweidong
--  发布时间:2014/5/21 15:58:00
--  
强制关闭foxtable,我还有其它的应用也是狐表做的,是不是都要被关了?这不符合情理啊。
--  作者:blackzhu
--  发布时间:2014/5/21 16:06:00
--  
你这个应该是没有什么办法吧
--  作者:有点甜
--  发布时间:2014/5/21 16:16:00
--  
以下是引用guoweidong在2014-5-21 15:58:00的发言:
强制关闭foxtable,我还有其它的应用也是狐表做的,是不是都要被关了?这不符合情理啊。

 

或者把升级代码写在beforeopenproject那里吧,没试过,应该是可以的。