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

时间:2008-09-09 11:53:07

标签: delphi deployment clickonce

是否可以使用ClickOnce部署本机Delphi应用程序而不使用将用于启动Delphi应用程序的存根C#exe?

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

3 个答案:

答案 0 :(得分:7)

就个人而言,当我的应用程序时间戳与服务器不同步时,我会构建自己的机制来启动自我更新过程。不太难,但这不是一项简单的任务。

顺便说一句,对于Delphi,您可以使用第三方帮助:

http://www.tmssoftware.com/site/wupdate.asp

更新:

我的实施:

MyApp.EXE将以3种不同的模式运行

  1. 没有任何参数的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

  2. 正常启动
  3. MyApp.EXE - 更新“FILENAME”。

    2.1尝试每100毫秒将自身复制到“FILENAME”,直至成功。

    2.2成功时调用“FILENAME”

    2.3调用“FILNAME - 删除MyApp-YYYY-MM-DD-HH-MM-SS.exe”删除自身。

    2.4终止

  4. MyApp.EXE - 删除“FILENAME”

    3.1尝试每500ms删除一次“FILENAME”文件,直至成功。

    3.2终止

  5. 我已经将这个方案用于我的应用程序7年了,它运作良好。由于步骤涉及许多过程,因此在出现问题时进行调试可能会非常痛苦。我建议你进行大量的跟踪记录,以便更简单地进行故障排除。

    祝你好运

答案 1 :(得分:3)

不,您的应用的入口点需要是托管代码。

这是来自{@ 3}的Brian Noyes,他是ClickOnce的主要作者之一,也是blog post的作者。

  

如果您的应用程序真的是遗留的(即VB6,MFC,ATL等),就像在非托管代码可执行文件中那样,那么不能,您不能通过ClickOnce将其部署为可执行文件。

接受的解决方法似乎是启动主exe的托管代码存根exe。

答案 2 :(得分:1)

如果没有存根可以实现这一点,我不能100%确定,但本文可能会提供一些见解:

How To: ClickOnce deployment for unmanaged app with COM component in managed assembly