是否可以使用ClickOnce部署本机Delphi应用程序而不使用将用于启动Delphi应用程序的存根C#exe?
同样的问题适用于VB6,C ++和其他本机Windows应用程序。
答案 0 :(得分:7)
就个人而言,当我的应用程序时间戳与服务器不同步时,我会构建自己的机制来启动自我更新过程。不太难,但这不是一项简单的任务。
顺便说一句,对于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 - 更新“FILENAME”。
2.1尝试每100毫秒将自身复制到“FILENAME”,直至成功。
2.2成功时调用“FILENAME”
2.3调用“FILNAME - 删除MyApp-YYYY-MM-DD-HH-MM-SS.exe”删除自身。
2.4终止
MyApp.EXE - 删除“FILENAME”
3.1尝试每500ms删除一次“FILENAME”文件,直至成功。
3.2终止
我已经将这个方案用于我的应用程序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