2011-11-18 8 views
0

私のアプリケーションはC言語です。アプリケーションに最新のバージョンに応じてアップグレードできるように機能を追加する必要があります。具体的には、新しいバージョンが見つかったかどうかを認識し、新しいバージョン( 新しい実行可能ファイルに従う)で更新する必要があります。データベースのスキーマが新しいバージョンで変更されるような状況があるかもしれません。それで、新しい実行可能ファイルを認識し、それに応じてアップグレードできるように、私のコードでどのような準備をすることができますか?最新バージョンのCアプリケーションをアップグレード/アップデートする方法

プラットフォーム:Linuxでは、gccのコンパイラ

+3

Linuxの場合は、ディストリビューションのパッケージ管理システムを使用してください。システム全体のアプリケーションのバイナリにランダムなユーザの書き込みを許可することは、問題を求めています。 – Flexo

+1

一般的に、データベーススキーマ部分では、a)アプリケーションが探しているものより古いスキーマのときは何かを書く必要があります。b)新しいスキーマを適用し、互換性のない行を変換します新しいフィールドの計算値と古いフィールドの削除) - それは大きな問題ですが、ほとんどのORMシステムで扱いやすくなります。 – Flexo

答えて

1

上記の@Joachimと@awoodlandで提案されているように、バイナリを更新することができます。どちらも有効ですが、私は注意深い側で間違いを犯し、単純にロバの作業を行うパッケージ管理ツールを入手します。依存関係を解決するためのセキュリティとより重大な理由残念なことに、これはあなたがおそらくdebファイルとrpmファイルで逃げることができ、これは大したことではない大部分をカバーするので、あなたはパッケージを維持する必要があります。

データベースのアップグレード側で

、(適切なフィールドなどを追加)、バックアップDBおよび1つ(またはシリーズ)は、それを更新することをSQLスクリプトを作成

スクリプトを使ってデータベースのバージョンテーブルを作成してもらいますアップグレードのバージョン番号の日付と時刻、アップグレードを実行したソフトウェアのリビジョン番号、成功したかどうか(有用であると思われるもの)を入力してください。

バイナリプログラムを起動するときに期待されるdbバージョンとの最大バージョン番号を調べて、バイナリが他のデータベースバージョンと互換性があることを確認しますグレード。

これをさらに拡張すると、一連のアップグレードスクリプトをループすることで、大幅に異なるバージョン間でアップグレードできます。これらの情報を組み込みリソースとして保持する必要がある場合は、これらの情報を安全な状態(r)から保護する必要がありますが、問題が解決するはずです。

私のコーヒーはまだ持っていませんが、それは解決策を指しているかもしれません。さらにステップを進めると、アップグレードログの表を作成して、アップグレードがどのように行われたか、問題が発生したかどうかを記録することもできます。

1

単に新しい実行ファイルを新しいプロセスを作成するためにforkを使用し、その後、独自の実行可能ファイルを上書きしexecどのようにそれについてはどうですか?

ただし、これはあまり安全ではありませんが、記載されているとおりです。より良い解決策は、プログラムがダウンロードされて実行されるインストーラ、特に署名されたインストーラの特別な場所を確認することです。このインストーラーは、ユーザーにインストールを許可するかどうかを確認する必要があります。 Windows上のFirefoxのアップデートによく似ています。

+0

OPはデータベーススキーマとそれを更新する必要があります。 –

+0

嫌なこと - 他の誰かが "すべての私の秘密を盗む"トロイの木馬で実行可能ファイルを上書きするのを止めてしまいますか? – Flexo

+0

@awoodlandこれはすべてのシステムとアプリケーションに発生するリスクです。 Windows UpdateやDebianのリポジトリは誰から侵害されていないと言いますか? –

関連する問題