web-dev-qa-db-ja.com

すべてのユーザーに対してWin32アプリケーションをRUNASINVOKERに設定します

一部のWindows10ホストで初期構成を実行するためのPowerShellスクリプトを準備しています。構成手順の1つには、管理の昇格を要求する古いソフトウェアの問題が含まれますが、これは必要ありません。このソフトウェアはスクリプト自体によって呼び出されることはありませんが、必要に応じてユーザーによって使用されます。このソリューションでは、互換性フラグを設定して、プログラムをすべてのユーザーの呼び出し元として実行するように強制する必要があります。このソリューションを構成スクリプトに実装する方法を見つけようとしています。

これを行うには、レジストリキーHKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layersに文字列値を追加します。文字列値の名前は問題の実行可能ファイルの絶対パスであり、そのデータ値は~ RUNASINVOKERです。これをPowershellスクリプトに入れることは問題ではありません。

問題は、マシンを再起動した後でも、これだけでは機能しないことです。有効にするには、エクスプローラーで実行可能ファイルを右クリックしてプロパティを選択し、[互換性]タブで[すべてのユーザーの設定を変更]を選択してから、設定を変更せずに新しいダイアログで[OK]をクリックする必要があります。

このプロセスは互換性設定を更新または初期化するために何かをしているように見えますが、何が起こるのか、PowerShellスクリプトで実装する方法はわかりません。

このプロセスも逆に機能することを付け加えておきます。 「すべてのユーザーの設定を変更する」修正を行った後、レジストリ値を追加できます。これはすぐに有効になります。

レジストリの追加を有効にするために何が起こっているのか、PowerShellスクリプトでこれを実装する方法を誰かが理解していますか?

ありがとうございました。

2
RobBeltran

実行中のソフトウェアは、.exeファイルを起動するための呼び出しだと思いますか?アプリケーションを実行する行の上にこの行を試してみませんか?

set __COMPAT_LAYER=RunAsInvoker
1
Joe Brailsford

すべてのユーザー向けに設定を変更すると、エントリが削除されます

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

そしてそれらを入れます

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

または

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

両方にキーがある場合、現在のユーザーのキーがローカルマシンのキーをオーバーライドし、それらが異なると、期待どおりに機能しない可能性があると思います。

0
David Parvin