7

VistaやWindows7でのレジストリ操作のVirtualStore仮想化を理解するのに問題があります。標準ユーザーとして実行しているときにHKEY_LOCAL_MACHINEルートに何かを書き込もうとすると、Windowsに操作を仮想化して、HKEY_CURRENT_USER / Classes /VirtualStore/に書き込むように促されると思いました。代わりにMACHINE 。私はいくつかの古いアプリケーションがまさにそのように動作するのを見てきました。

ただし、C#および.Net4でその動作を複製しようとすると、HKLMへの書き込み操作が失敗し、代わりにUnauthorizedAccessExceptionが発生します。仮想化を強制する方法はありますか?

質問にいくつかのコンテキストを与えるために:私は元々別のレガシーアプリによって作成されたレジストリキーを読み取って操作しようとしています。VistaまたはWindows7では、これらはVirtualStoreに配置されます。WinXP以上で同じレジストリアクセスロジックを使用したいのですが、レジストリ操作は従来のアプリの操作とまったく同じように仮想化されると思いました(そのため、同じキーで動作します)。これは期待どおりに機能しません。ユーザーがVistaまたは7を実行していて、UACが有効になっている場合、私が知っている唯一の回避策は、VirtualStoreパスにアクセスすることです。ただし、特にMicrosoftが仮想化の動作を変更することを決定した場合は醜いようです。将来のWindowsバージョン。

4

1 に答える 1

3

MSDNの記事「WindowsVistaのレジストリ仮想化」では、特定のクラスのプロセスで仮想化が無効になっていると説明されています。

  • 64ビットプロセス
  • マニフェストでrequestedExecutionLevelが指定されている実行可能ファイル
  • と他のいくつか; 詳細については記事を確認してください

最初の2つの一方または両方は、通常、.NETアプリケーションに当てはまります(コンパイラーが提供するデフォルトのマニフェストのため)。仮想化を有効にするには、マニフェストを削除する必要があります(アプリケーションがレガシーアプリのように見えるようにするため)が、これは(Windowsとの上位互換性のために)悪い考えです。代わりに、アプリがVista(およびそれ以降)で仮想化されていないと想定し、それに応じて続行します。

さらに、この記事では、「Microsoftはこの形式の仮想化をWindowsオペレーティングシステムの将来のバージョンから削除する予定です...アプリケーションがシステム内の仮想化の存在に強く依存しないことが不可欠です」と警告しています。どのコードを記述しても、VirtualStoreキーが将来のバージョンのWindowsに存在しない可能性があることを予期する必要があります。

于 2011-01-23T23:43:15.280 に答える