是否可以使用 ClickOnce 部署本机 Delphi 应用程序
-
09-06-2019 - |
题
是否可以使用 ClickOnce 部署本机 Delphi 应用程序,而无需用于启动 Delphi 应用程序的存根 C# exe?
同样的问题也适用于 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”
MyApp-YYYY-MM-DD-HH-MM-SS.exe --update MyApp.EXE
1.4 终止本应用程序。
1.5 如果不需要更新,则应用程序将从 1.1 开始正常启动
MyApp.EXE --更新“文件名”。
2.1 尝试每100ms将自身复制到“FILENAME”,直到成功。
2.2 成功后调用“FILENAME”
2.3 调用“FILNAME --delete MyApp-YYYY-MM-DD-HH-MM-SS.exe”删除自身。
2.4 终止
MyApp.EXE --删除“文件名”
3.1 尝试每隔500ms删除一次文件“FILENAME”,直至成功。
3.2 终止
我已经在我的应用程序中使用这个方案 7 年了,而且效果很好。当出现问题时,调试可能会非常痛苦,因为这些步骤涉及许多过程。我建议您进行大量跟踪记录,以便更简单地进行故障排除。
祝你好运
其他提示
不,您的应用程序的入口点需要是托管代码。
这是来自一个 博客文章 作者:Brian Noyes,ClickOnce 的主要权威之一和作者 使用 ClickOnce 进行智能客户端部署.
如果您的应用程序确实是遗留的(即VB6、MFC、ATL 等),如在非托管代码可执行文件中,那么不可以,您不能通过 ClickOnce 将其部署为可执行文件。
可接受的解决方法似乎是启动主 exe 的托管代码存根 exe。
我不能 100% 确定是否可以在没有存根的情况下完成此操作,但本文可能会提供一些见解: