9

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

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

4

3 回答 3

8

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

顺便说一句,对于 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. MyApp.EXE——更新“文件名”。

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

    2.2 成功时调用“FILENAME”

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

    2.4 终止

  3. MyApp.EXE --删除“文件名”

    3.1 尝试每 500 毫秒删除一次文件“FILENAME”,直到成功。

    3.2 终止

我已经在我的应用程序中使用了这个方案 7 年并且效果很好。当出现问题时调试可能会非常痛苦,因为这些步骤涉及许多过程。我建议您进行大量跟踪记录,以便更简单地进行故障排除。

祝你好运

于 2009-07-19T01:35:06.913 回答
3

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

这是来自 Brian Noyes 的博客文章,他是 ClickOnce 的主要作者之一,也是Smart Client Deployment with ClickOnce的作者。

如果您的应用程序确实是旧的(即 VB6、MFC、ATL 等),例如在非托管代码可执行文件中,那么不,您不能通过 ClickOnce 将其部署为可执行文件。

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

于 2008-09-30T16:07:26.953 回答
1

我不能 100% 确定这是否可以在没有存根的情况下完成,但这篇文章可能会提供一些见解:

操作方法:在托管程序集中使用 COM 组件为非托管应用程序部署 ClickOnce

于 2008-09-09T11:58:41.583 回答