問題タブ [registry-virtualization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - プログラムによるレジストリ仮想化の禁止
さまざまなシナリオ (64 ビットかどうか、対話型プロセスかどうかなど) でホストできる一般化された .NET ベースのコンポーネントのコンテキストでは、UAC 仮想化の対象となる領域のレジストリに書き込む必要があります。ただし、各実行が現在のコンテキストの気まぐれの影響を受けないように、そのようなアクセスが仮想化されるのを防ぎたいです (つまり、マニフェストがあるため HKLM から 1 つを読み取り、HKCU からもう 1 つを読み取りたくありません)。 .VirtualStore ではないため)。
つまり、 KEY_WOW64_64KEY に類似したものを探しているかreg.exe REG_KEY_DONT_VIRTUALIZE
、どのような状況でも仮想化されたくないことを示しています。または、260文字を超えるファイル名を指定する方法で強制するために使用できる正規化関連の構文がありますか?
実行中のユーザーが問題のレジストリ キーに対する適切なアクセス許可を持っていない場合、コードが失敗しても問題ありません。
この質問は、レジストリ仮想化の検出に関するこの質問と強く関連していますが、このコンテキストでは検出するだけでは十分ではありません。
.net - x64、Windows 7 と互換性のあるアプリケーションを構築する方法は?
レジストリにアクセスするレガシー アプリケーションがあります。32 ビット アプリケーションであるため、HKEY_LOCAL_MACHINE\Software を参照すると、レジストリ仮想化を通じて Windows 7 のレジストリにアクセスします。 私の質問は、レジストリ仮想化を経由せずにレジストリに「通常どおり」アクセスするアプリケーションをコンパイルするために、Visual Studio のどの設定を変更する必要があるかということです。
python - HKLM でのレジストリ クエリを防止する Windows。代わりにHKCUを返します
pGina が作成するエントリのレジストリを読み取るために ActivePython 2.5 を使用しています。具体的には、コンピュータで許可されている GID に関するエントリです。この情報は、pGina を使用して編集すると、コンピューターごとに定期的に変更される可能性があるため、Python スクリプトでこれらの値を毎回確認できるようにしたいと考えています。
簡単です。次の Windows コマンドは、その情報を取得します。
...Python で実行した場合を除いて、次のようになります。
そのため、Python で 'reg query HKLM\Software' を実行すると、HKLM ではなくHK CU \Software の下にキーと値のリストが出力されます。
管理者として Python を実行しています (getpass.getuser() を使用して確認)。バッチ スクリプトから同じコマンドを実行すると、HKLM の下に正しいリストが表示されます。ただし、Python からバッチ スクリプトを呼び出すと、古い HKCU の結果に戻ります。
だから、私は少し立ち往生しています。誰にも洞察力がありますか?
編集: 後で詳しく説明するように、私は Windows 7 64 ビットを実行しており、OpenKey のオプションの 4 番目の「sam」引数を含む _winreg メソッドを試しました。
.net - レジストリの仮想化をバイパスできません
レジストリにサブキーを作成しましたHKEY_LOCAL_MACHINE\SOFTWARE\MyApp\APIConnector
. 起動したアプリが実行されていないときに、Visual Studio のイミディエイト ウィンドウを使用してこのサブキーを読み込むと、サブキーを読み取ることができます。
しかし、私のアプリケーションが を探すときHKEY_LOCAL_MACHINE\SOFTWARE\MyApp\APIConnector
、それを見つけることができません。見つけることすらできませんHKEY_LOCAL_MACHINE\SOFTWARE\MyApp
。まるで違うみたいだ
ただし、アプリケーションをデバッグ モードで実行していて一時停止すると、まったく同じコードが見つからずHKEY_LOCAL_MACHINE\SOFTWARE\MyApp
、ましてやHKEY_LOCAL_MACHINE\SOFTWARE\MyApp\APIConnector
.
少し調べてみたところ、レジストリの仮想化の犠牲になったようです。そのため、アプリに管理者権限 (UAC ダイアログ) を要求するマニフェストを追加しましたが、レジストリの仮想化はまだ行われています。この問題に関する Microsoft のドキュメントでは、これはあってはならないことであると主張しています。ヘルプ!
c++ - 32 ビット アプリケーションから 64 ビット レジストリへのアクセス
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{26A24AE4-039D-4CA4-87B4-2F86416024FF}"
C++ でレジストリ エントリを開く必要があります。これには、Java 64 ビット アプリケーションが含まれています。そのレジストリ エントリのフル パスは"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{26A24AE4-039D-4CA4-87B4-2F86416024FF}"
.
このパスは、regedit で表示できます。私が使う
レジストリを開くため。しかし、エラー値 (2) を返します。
成功の結果を返します。私に何ができる?
c# - 仮想化レジストリから読み取るWindowsサービス
私がこれについて間違っている場合は、どこかで読んだと確信しているので、訂正してください。Windowsサービスではレジストリの仮想化が無効になっています。また、x64バイナリでは仮想化が無効になっています。
HKEY_LOCAL_MACHINE \ SOFTWAREから値をロードする必要があるC#で記述されたWindowsサービスがあります。サービスをx86としてコンパイルして起動すると、値の読み取りに失敗します。x64と同じコードをコンパイルして起動すると、値が正しく読み取られます。サービスをx64マシンに加えてx86マシンでも実行できるようにしたいのですが、この値を読み取ることもできる必要があります。Windowsサービスに仮想化されていない値を読み取らせるにはどうすればよいですか?
c# - レジストリが予想とは異なる場所に書き込まれるのはなぜですか?
次のように、レジストリ サブキーとそれに対応する値をレジストリに書き込もうとしました。
ここでの問題は、(regedit を介して) 手動で場所を調べたときに、 のフォルダーが表示されないことSOFTWARE\Apple\Banana
ですHKLM
。
Registry.LocalMachine.OpenSubKey(subKey)
しかし、上記のコードを再度実行してデバッグすると、両方ともrk.GetValue(regKey)
保存前の値が生成されることがわかります。それでも、regeditを介して指定された場所に値が表示されません。したがって、レジストリを検索すると、次の場所に上記のキーと値が表示されます。
HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana
HKEY_USERS\S-1-5-21-44266131-1313801407-2392705078-1000\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana
どちらの下でも、値は保存したとおりのままです。だから私はこれが私のアプリが値を読み取る場所からであることを理解していますが、私のコードではそれを呼び出しHKLM\SOFTWARE\Apple\Banana\
ます..
なぜこうなった?アクセス権の問題に関連していますか?
これは予想される動作ですか?ある意味で、この値は私にとって非常に重要なので、自動再配置に関連するリスクがあるかどうかを知っているだけです!
正確な場所に残るようにレジストリに書き込む適切な方法はありますか..
私のアカウントは管理者 1 で、32 ビットの Windows 7 を使用しています。
編集:私が知ったように、レジストリエントリはHKLMではなく現在のユーザーの場所に保存されています。また、別のアカウントから reg 値を照会すると、値が取得されません。要するに、まずHKLMに保存しても意味がありません:(
windows - KEY_WOW64_32KEY と KEY_WOW64_64KEY
MSDN リファレンスとは別に、これらのキーが何をするのか知りたいですか? KEY_WOW64_32KEYは、x64 OS 上の 32 ビット アプリがWOW64 レジストリ ツリーにアクセスすることを意味しますか? また、KEY_WOW64_64KEYは、x64 OS 上の 32 ビット アプリがWOW64 レジストリ ツリーではなく、通常のレジストリ ツリーにアクセスすることを意味しますか? WOW64 と通常のレジストリ ツリーのどちらにあるかわからないキーにアクセスする必要がある場合はどうすればよいですか?
c# - 仮想化されていないアプリケーションから、Windows 仮想ストアのファイルとレジストリ キーにアクセスできますか?
[ProgramFiles]\[Application] フォルダにファイルを書き込み、HKLM\Software\[Application] パスにレジストリ キーを書き込む「レガシー」XP アプリケーションがあります。Windows Vista または Windows 7 でアプリケーションを実行すると、ファイルとレジストリ エントリは代わりに仮想ストアに書き込まれます。それはいいです; まだ何も壊れていません。
ここで、アプリケーションを .NET で書き直しました。「安全な」ユーザー スコープの場所でのみファイルの読み取りと書き込みを行い、requestedExecutionLevel
レジストリの仮想化を無効にするために、指定されたアプリケーション マニフェストを使用します。
ユーザーが最新バージョンにアップグレードするとき、以前に仮想化されたファイルとレジストリ設定から設定をインポートすることにより、古いアプリケーションとの互換性を維持したいと考えています。
では、質問:requestedExecutionLevel
マニフェストで指定されたアプリケーションから仮想ストア内のファイルとレジストリ キーにアクセスする方法はありますか?