1

ClickOnce ロールバック

1 人のユーザーが 1 つのバージョンをロールバックした場合、アプリケーションはローカルでこれを確認し、最新バージョンをインストールするオプションを提供するにはどうすればよいでしょうか?

当社の Clickonce アプリケーションは、テクノロジーの継続的統合の側面により多数あります。新しいバージョンがあり、ユーザーがしなければならないことは、インストールを受け入れることだけです。バージョン固有の .application ファイルを「Application Files」サブディレクトリからメイン ルート パスに移動するだけで、新しいバージョンをグローバルにロールバックすることもできます。特定のユーザーがロールバックする必要がある場合、レジストリからアンインストール文字列を実行するか、コントロール パネルを使用して以前のバージョンに戻すことができます。

私が解決できなかった問題の 1 つは、そのユーザーを「アップグレード チェック」ループに戻すことです。私はSysinternalsツールのProcess Monitorを使用して、ClickOnce のレジストリおよびファイル システム ロジックに従っています。ツール データを確認すると、ローカルの ClickOnce ファイルの場所と、SideBySide 設定のレジストリ エントリが示されます。ただし、個々のロールバックを行ったローカル ユーザーをオーバーライドするために、どの設定を変更すればよいかわかりません。このタスクを達成するには、レジストリの SideBySide PackageMetadata を変更する必要があると確信しています。

具体的には、実行中の ClickOnce アプリケーションのどのバージョンでも、ユーザーが 2 つの選択肢を利用できるようにしたいと考えています。ロールバックを強制するための 1 つの選択と、現在の更新でユーザーが軌道に戻ることを可能にする別の選択。私は最初のコードしか達成できません。

\\Server\Share\{clickonce}.application
\\Server\Share\Application_Files\{clickonce}_{version x}\{Clickonce}.application
\\Server\Share\Application_Files\{clickonce}_{version y}\{Clickonce}.application

Process:
dfsvc.exe

Local Storage:
C:\Users\{user}\AppData\Local\Apps\2.0\{unique}\{unique}
C:\Users\plugged\AppData\Local\Temp\Deployment\{unique}\{unique}.application

Registry:
HKCU\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment\SideBySide\2.0\PackageMetadata
HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall\{guid}
4

1 に答える 1

0

私は解決策を見つけたと信じています。ClickOnce アプリケーションをアップグレード ループに戻すには、ローカル バージョンから現在のサーバー バージョンにリンクするだけです。ClickOnce アプリケーションは、デスクトップ アイコンを使用して起動します。ユーザーがローカル バージョンをロールバックした場合でも、デスクトップ アイコンは変更されず、依然としてサーバーの場所を指しています。ただし、ローカルのロールバック バージョンのみを実行し、更新をチェックしません。解決策は、サーバーの現在の .application ファイルにリンクするプロセスを開始するメソッドを持つことです。これを行うには、新しいプロセス変数を作成し、「StartInfo」に ClickOnce アプリケーションの WorkingDirectory と Filename を設定します。

\Server\Share{ClickOnce}.application

dgp

于 2013-06-03T16:28:03.930 に答える