2011-07-25 10 views
1

私は社内ネットワーク内にアプリケーションを導入しました。私は更新プロセスが、Google Chromeのアップデートの仕組みと同様に、バックグラウンドでユーザの注意を払う必要がないようにしたいと考えています。ユーザーに更新の選択肢を与える必要はありません。ClickOnceアプリを手動で(そして静かに)アップデートして、アップデートを安定して配布する方法ですか?

私はSystem.Deploymentライブラリを使用して、新しいClickOnceアップデートがいつ利用可能かを検出し、自動的にインストールしました。私は、更新が完了した後にアプリを再起動する必要があるかどうか疑問に思います。現在私は更新スクリプトの最後にApplication.Restart()を呼び出しています。

私は 'サイレント'非同期アップデートを実行し、変更を適用するためにアプリケーションを再起動するように促すアイコンを表示しましたか?これは、アプリをどのようにしても不安定にしますか?

さらに、私が自分のカスタムInstallUpdate()プロセスをタイマーで実行した場合、30分ごとに、ユーザーが再起動していなくても解放された新しいバージョンごとにClickOnceが安定して更新されます(nb:ユーザーがアプリを再起動した後にのみアップデートが適用されると期待しています)。

+1

これを試しましたか? –

+0

このようにして私が見つけることができる唯一のリファレンスはここにあります:[http://msdn.microsoft.com/en-us/magazine/cc163973.aspx](http://msdn.microsoft.com/en-us/us/) /magazine/cc163973.aspx) – CrazyTim

+0

はい、試しましたか?すなわち、Click-onceを使用してプログラムを作成し、アプリケーションを静かに更新して再起動するのではなく、数回更新して手動で再起動します。これがうまくいくかどうかは簡単に分かります。 –

答えて

1

このように数年後、私たちはサイレントにアップデートをインストールすることが可能であることを発見しました。しかし、注意すべきいくつかの問題があります:スレッドがUpdate()(例:更新が進行中であるときに、ユーザーがアプリの外に出て)中に途中で終了した場合

  1. 、インストールが破損し、ユーザーが次回にアプリケーションを読み込むと、ClickOnceの通常の配備が起動し、アプリケーションを再インストールします。

  2. 更新プログラムのインストール後、ユーザーのデスクトップアイコンは常に再描画(ちらつき)します。

  3. ApplicationDeployment.CurrentDeployment.CheckForUpdate()を65536回以上呼び出すと、System.NullReferenceExceptionSourceが発生します。

    代替が実際に更新を確認することはありませんが、私はこれが私のDLLの1をロックすることを発見し、読み込みからフォームを防ぐため、注意して使用している:あなたのClickOnceプロジェクトがある場合は

    If ApplicationDeployment.CurrentDeployment.Update Then ' update app 
        console.writeline("update installed") 
        ' code to inform user update was sucessfull and they need to restart 
    End If 
    
  4. 32ビットで、x64プラットフォームで実行すると、手動ClickOnceアップデートを実行した後にアプリケーションが持つファイル関連が破損します。詳細はMS support caseを参照してください。

+1

約10名のプロダクション環境で2ヶ月間アップデートをインストールした後、私は2つの副作用に気付きました:** 1)**アップデートプロセスが完了した後、Windowsデスクトップが再描画されます(ちらつきやアイコンの再現が目立ちます) 、** 2)**アプリケーションは、_Application.Restart()_を呼び出す「適用と再起動」ボタンをユーザがクリックしたときにクラッシュすることがありますが、これはアップデートのインストールに関連しないかもしれません。 .. – CrazyTim

+1

更新:デスクトップの再描画はおそらく、ClickOnceがアプリケーションのデスクトップショートカットを削除して再作成するためです。 – CrazyTim

+1

副作用について** 2)**私が 'Application.Restart'を呼び出した後にフォームを開くと、少なくともWindowsフォームで発生する可能性があります(私の場合は、FormClosingイベントハンドラでフォームを開き、' InvalidOperationException ') - MessageBox.Showでメッセージボックスを表示するのは安全です。詳細については、この[discussion](http://social.msdn.microsoft.com/forums/en-US/winforms/thread/d7dbae4e-3cf7-45e4-8172-62b18a19207e)のWindows Formsフォーラム(特に最後の投稿)。 – edymtt

1

私はそれはあなたのアプリケーションが起動時に何をするかに依存し、何それは更新プログラムがインストールされたときにやっていると、アプリケーションが再起動され、そしてどのようなアップデートが含まれていると思うだろう。あなたはそれを実行して、デバッガをアタッチして、それが何をしているのか、そしてそれがどんな影響を持っているのか見ることができます。

たとえば、アプリケーションが起動すると、多くの情報がメモリに読み込まれます。更新プログラムにデータ構造の変更が含まれていて、アプリが何らかの理由でデータを再読み込みしなかった場合、問題が発生する可能性があります。

+0

再起動しないと、現在実行中のコードが変更されていないと推測されますので、データ構造の問題は発生しません。アプリケーションが予期しない形式で情報を送信する可能性のある他の(Webサービス、サーバーなど)と通信している場合や、更新された可能性のあるデータを読み込んだ場合を除きます。 –

+0

@Julienはい、これらのインスタンスで同時にクライアントとサーバーを更新する必要があります。または、サーバー上の変更が、引き続き実行中の古いバージョンのクライアントと互換性があることを確認してください。 – CrazyTim

関連する問題