0

Java アプリケーションを更新してから起動する C# プログラムがあります。Java を実際に起動する前に、プログラムが使用する .jar ファイルの更新をチェックします。一度に複数の人が特定のマシン (ターミナル サーバーの場合もあります) でアプリケーションを実行している可能性や、同じユーザーがプログラムの複数のインスタンスを実行している可能性があります。他の人がアプリケーションを実行している場合、.jar ファイルは使用中であり、更新できません。私はこれを回避しようとしています。

私の好みは、.jar ファイルの名前を変更して更新することです。現在アプリケーションを実行しているすべての人は、名前が変更された jar ファイルを引き続き使用できます。Windows では、使用中のファイルの名前を変更することもできません (Unix システムではできると思いますが)。

ただし、Windows エクスプローラーを使用すると、jar ファイルをコピーして貼り付け、使用中の .jar ファイルを上書きできることに気付きました。それはどのように機能しますか? また、アップデーター/ランチャー プログラムで同様のことを行うことはできますか?

私が使用できる他のアプローチはありますか?

4

3 に答える 3

1

これを達成する(簡単な)方法はないと思います。私が考えることができるいくつかのアイデアは次のとおりです。

  • 更新を別のダウンロード場所にダウンロードします。アプリケーションを起動するたびに、アップデートを試してインストールし、失敗した場合はロールバックして後で再試行してください。
  • ある種のロック ファイルを使用して、プログラムが実行中であること、または更新が進行中であることを示し、それに応じてアクションを実行します。例えば。更新があり、「実行中」および「更新」ロック ファイルが存在しない場合は、「更新」ロック ファイルを作成して更新をインストールし、完了したら「更新」ロックを削除します。更新を実行し、「更新」ロック ファイルが存在する場合は、「更新」ロック ファイルが削除されるまで待ってから、更新をインストールする前に再度確認することをお勧めします。更新があり、「実行中」のロックが存在する場合は、更新プロセスをスキップする必要があります...
  • 接続しているすべてのユーザーに、しばらくすると強制的に切断され、サーバーが再起動されることを伝えます。期間が終了したら、実行中のアプリケーションを強制終了し、サーバーを更新します。何らかの「ロック」メカニズムを追加して、更新プロセスが完了するまでアプリケーションの新しいインスタンスが開始されないようにすることができます....
于 2013-09-12T03:05:41.023 に答える
0

古いフォルダーと新しいフォルダーの 2 つのフォルダーを作成します。

どちらにも同じファイルが含まれます。更新がない場合は、全員が新しいフォルダーのファイルを使用します。更新がある場合、jar を新しいフォルダーから古いフォルダーにコピーすると、新しいフォルダー内の jar ファイルへのすべての接続が切断されるまで、すべての新しい接続で古いフォルダー内の jar ファイルが使用されます。最後に、全員が古いフォルダーの jar ファイルを使用する場合は、更新を新しいフォルダーにコピーします (もちろん、これはすべて自動的に行われます)。最後に、更新が完了すると、すべての新しい接続で新しいフォルダーの jar ファイルが使用されます。フォルダ。これが役立つことを願っています。

于 2013-09-12T03:43:13.193 に答える