ClickOnce を使用してネイティブ Delphi アプリケーションをデプロイすることはできますか
-
09-06-2019 - |
質問
Delphi アプリケーションの起動に使用されるスタブ C# exe を使用せずに、ClickOnce を使用してネイティブ Delphi アプリケーションをデプロイすることは可能ですか?
同じ質問が 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 成功するまで、100 ミリ秒ごとに自分自身を「FILENAME」にコピーしてみてください。
2.2 成功時に「FILENAME」を呼び出す
2.3 「FILNAME --delete MyApp-YYYY-MM-DD-HH-MM-SS.exe」を呼び出して、それ自体を削除します。
2.4 終了
MyApp.EXE --「ファイル名」を削除します
3.1 成功するまで、500 ミリ秒ごとにファイル「FILENAME」の削除を試みます。
3.2 終了
私はすでにこのスキームを自分のアプリケーションに 7 年間使用しており、うまく機能しています。多くのプロセスが含まれるため、問題が発生した場合のデバッグは非常に困難になる可能性があります。トラブルシューティングを簡単にするために、大量のトレース ログを作成することをお勧めします。
幸運を
他のヒント
いいえ、アプリへのエントリ ポイントはマネージド コードである必要があります。
これはある人からのものです ブログ投稿 ClickOnce の主要権威の 1 人であり、 ClickOnce によるスマートなクライアント導入.
あなたのアプリが本当にレガシーである場合(つまり、VB6、MFC、ATL など)、アンマネージ コードの実行可能ファイルと同様に、ClickOnce を介して実行可能ファイルとして展開することはできません。
受け入れられた回避策は、メインの exe を起動するマネージド コード スタブ exe であるようです。
スタブなしでこれを実現できるかどうかは 100% わかりませんが、この記事がいくつかの洞察を提供するかもしれません。
方法:マネージド アセンブリ内の COM コンポーネントを使用したアンマネージド アプリの ClickOnce デプロイメント