关于部署:是否可以使用ClickOnce部署本机Delphi应用程序

关于部署:是否可以使用ClickOnce部署本机Delphi应用程序

Is it possible to deploy a native Delphi application with ClickOnce

是否可以在没有用于启动Delphi应用程序的StubbingC#exe的情况下使用ClickOnce部署本机Delphi应用程序?

同一问题适用于VB6,C和其他本机Windows应用程序。


我个人建立了自己的机制来在我的应用程序时间戳与服务器不同步时启动自我更新过程。不太困难,但这不是一个简单的任务。

顺便说一句,对于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"

    1
    MyApp-YYYY-MM-DD-HH-MM-SS.exe  --update MyApp.EXE

    1.4终止此应用程序。

    1.5如果不需要更新,则应用程序将从1.1开始正常启动

  • MyApp.EXE-更新"文件名"。

    2.1尝试每100毫秒将其自身复制到" FILENAME",直到成功。

    2.2成功调用" FILENAME"

    2.3调用" FILNAME-删除MyApp-YYYY-MM-DD-HH-MM-SS.exe"将其自身删除。

    2.4终止

  • MyApp.EXE-删除"文件名"

    3.1尝试每500毫秒删除文件" FILENAME",直到成功。

    3.2终止

  • 我已经将这种方案用于我的应用程序已有7年了,并且效果很好。出错时进行调试可能会非常痛苦,因为这些步骤涉及许多流程。我建议您进行大量跟踪日志记录,以简化故障排除过程。

    祝你好运


    否,您应用的入口必须是托管代码。

    这是来自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的托管代码Stubbingexe。


    我不确定100%是否可以在没有Stubbing的情况下完成此操作,但是本文可能会提供一些见解:

    方法:托管组件中具有COM组件的非托管应用程序的ClickOnce部署


    推荐阅读