是否可以使用ClickOnce部署原生的Delphi应用程序而不需要一个用于启动Delphi应用程序的C# exe?
同样的问题也适用于VB6、C++和其他本地Windows应用程序。
是否可以使用ClickOnce部署原生的Delphi应用程序而不需要一个用于启动Delphi应用程序的C# exe?
同样的问题也适用于VB6、C++和其他本地Windows应用程序。
就我个人而言,当我的应用程序时间戳与服务器不同步时,我会构建自己的机制来启动自我更新过程。这并不太困难,但也不是一项简单的任务。
顺便说一下,对于Delphi,您可以使用一些第三方帮助:
http://www.tmssoftware.com/site/wupdate.asp
更新:
对于我的实现:
MyApp.EXE将以3种不同的模式运行
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
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
MyApp.EXE --delete "FILENAME"
3.1 Try deleting the file "FILENAME" every 500ms until success.
3.2 Terminate
接受的解决方法似乎是一个托管代码存根exe,它启动主exe。如果您的应用程序真正是遗留的(即VB6、MFC、ATL等),也就是非托管代码可执行文件,则无法通过ClickOnce部署它作为可执行文件。
我不确定没有 stub 是否能完成这个任务,但是本文可能会提供一些见解: