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

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

有帮助吗?

解决方案

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

顺便说一句,对于 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 尝试每100ms将自身复制到“FILENAME”,直到成功。

    2.2 成功后调用“FILENAME”

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

    2.4 终止

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

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

    3.2 终止

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

祝你好运

其他提示

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

这是来自一个 博客文章 作者:Brian Noyes,ClickOnce 的主要权威之一和作者 使用 ClickOnce 进行智能客户端部署.

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

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

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

如何:在托管程序集中使用 COM 组件对非托管应用程序进行 ClickOnce 部署

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top