能否使用ClickOnce部署原生Delphi应用程序?

9

是否可以使用ClickOnce部署原生的Delphi应用程序而不需要一个用于启动Delphi应用程序的C# exe?

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

3个回答

8

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

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

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

更新:

对于我的实现:

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

  1. MyApp.EXE without any argument. This will start the application typically.

    1.1 The very first thing it does is to validate its own file-time with the server.

    1.2 If update is required then it will download the updated file to the file named "MyApp-YYYY-MM-DD-HH-MM-SS.exe"

    1.3 Then it invoke "MyApp-YYYY-MM-DD-HH-MM-SS.exe" with command argument

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

    1.4 Terminate this application.

    1.5 If there is no update required then the application will start normally from 1.1

  2. MyApp.EXE --update "FILENAME".

    2.1 Try copying itself to "FILENAME" every 100ms until success.

    2.2 Invoke "FILENAME" when it success

    2.3 Invoke "FILNAME --delete MyApp-YYYY-MM-DD-HH-MM-SS.exe" to delete itself.

    2.4 Terminate

  3. MyApp.EXE --delete "FILENAME"

    3.1 Try deleting the file "FILENAME" every 500ms until success.

    3.2 Terminate

我已经使用这个方案来开发我的应用程序7年了,它运行良好。但是当出现问题时,由于步骤涉及多个进程,调试可能会非常痛苦。建议您进行大量的跟踪日志记录,以便更简单地进行故障排除。
祝好运。

这正是我最终做的事情。 - Branko

3
不,您的应用程序入口点需要是托管代码。
这是Brian Noyes的博客文章中提到的,他是ClickOnce的主要作者之一,也是使用ClickOnce进行智能客户端部署的作者之一。

如果您的应用程序真正是遗留的(即VB6、MFC、ATL等),也就是非托管代码可执行文件,则无法通过ClickOnce部署它作为可执行文件。

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

1

似乎这个问题只适用于你可以将清单指向托管程序集的COM组件的环境中。100%非托管的解决方案将无法提供这个小技巧的使用空间。 - Warren P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接