是否可以使用ClickOnce部署本机Delphi应用程序
时间:2020-03-05 18:50:00 来源:igfitidea点击:
是否可以在没有用于启动Delphi应用程序的存根Cexe的情况下使用ClickOnce部署本机Delphi应用程序?
相同的问题适用于VB6,C ++和其他本机Windows应用程序。
解决方案
回答
我不确定100%是否可以在没有存根的情况下完成此操作,但是本文可能会提供一些见解:
如何:在托管程序集中具有COM组件的非托管应用程序的ClickOnce部署
回答
不,我们应用程序的入口必须是托管代码。
这是来自Brian Noyes的博客文章,该博客是ClickOnce的主要权威之一,也是使用ClickOnce进行智能客户端部署的作者。
If you app is REALLY legacy (i.e. VB6, MFC, ATL, etc.), as in an unmanaged code executable, then no, you cannot deploy it as an executable through ClickOnce.
公认的解决方法似乎是启动主exe的托管代码存根exe。
回答
就我个人而言,我建立了自己的机制来在我的应用程序时间戳与服务器不同步时启动自我更新过程。不太困难,但这不是简单的任务。
顺便说一句,对于Delphi,我们可以使用一些第三方帮助:
http://www.tmssoftware.com/site/wupdate.asp
更新:
对于我的实现:
MyApp.EXE将在3种不同模式下运行
- MyApp.EXE,不带任何参数。通常,这将启动应用程序。 1.1它要做的第一件事是验证服务器自身的文件时间。 1.2如果需要更新,则它将更新的文件下载到名为" MyApp-YYYY-MM-DD-HH-MM-SS.exe"的文件。1.3然后,它调用" MyApp-YYYY-MM-DD-HH-MM- SS.exe"和命令参数
MyApp-YYYY-MM-DD-HH-MM-SS.exe --update MyApp.EXE
1.4终止此应用程序。 1.5如果不需要更新,则应用程序将从1.1开始正常启动
- MyApp.EXE-更新" FILENAME"。 2.1尝试每100毫秒将其自身复制到" FILENAME",直到成功。 2.2成功调用" FILENAME" 2.3调用" FILNAME-删除MyApp-YYYY-MM-DD-HH-MM-SS.exe"以删除自身。 2.4终止
- MyApp.EXE-删除" FILENAME" 3.1尝试每500毫秒删除一次" FILENAME"文件,直到成功。 3.2终止
我已经在我的应用程序中使用此方案7年了,并且效果很好。出错时进行调试可能会非常痛苦,因为这些步骤涉及许多流程。我建议我们进行大量跟踪日志记录,以简化故障排除过程。
祝你好运