以前記事にも書きましたが、Windows10を20H2にバージョンアップした途端にAccessのシステムが動かなくなる事象が発生しました。
この時の対応として、Access本体の互換モードにチェックを入れてWindows8を選択することで回避できました。
ここまではよかったのですが、Windows10を20h2→21h2にバージョンアップすると互換性モードのチェックが外れて元に戻ってしましました。2~3台であればもう一度同じ設定をすればよいのですが、使用している端末が数十台を超えるとかなり面倒なのでバッチなどで各端末を使用する人が実行することで互換性設定を入れることができないか調べてみました。
調べてみたところpowershellでレジストリ登録をすることででできました。
互換性設定を行う
今回はAccessの互換性設定を行いますが、その他のアプリケーションの互換性設定を入れたい場合も同様の手順で対応できます。
手動で互換性設定を行う場合
手動で行う場合は、互換性設定を行いたいアプリケーション(.exe)ファイルを右クリック→プロパティ→互換性タブの互換モードにチェックをいれます。Accessの場合は以下の通りです。

- C:\Program Files (x86)\Microsoft Office\root\Office16\MSACCESS.EXEのプロパティ
- 互換モードでこのプログラムを実行するにチェックを入れる。
- 適用ボタンをクリックして再度Accessのシステムを立ち上げ直す
手順としては、これが一番簡単ですがC:\Program Files (x86)を触るのであまりパソコンが詳しくない人には触ってもらいたくないところですね!!また、各端末ごとに設定する必要があるので一人でたくさんの端末に設定しようと思うとこれまた面倒ですよね!!!
バッチで互換性設定を行う
そこでpowershellのコマンドを実行するバッチを作成して各ユーザーに実行してもらう方法を紹介します。このバッチファイルを共有フォルダなどに公開して各自実行してもらうようにします。
powershell -ExecutionPolicy Unrestricted -command "New-ItemProperty -LiteralPath 'HKCU:SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers' -Name 'C:\Program Files (x86)\Microsoft Office\root\Office16\MSACCESS.EXE' -PropertyType 'String' -Value '~ WIN8RTM'"
pause
解説
上記バッチはpowershellの実行ポリシーを変更して、レジストリに互換性設定を追加しています。
設定内容は以下の通りです。
- レジストリ登録先:HKCU:SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
- 互換性設定を入れるアプリケーションのフルパス:C:\Program Files (x86)\Microsoft Office\root\Office16\MSACCESS.EXE
- Windows8の互換モードで動かしたい場合は~ WIN8RTM
私の環境ではpowershellの実行ポリシーがRestrictedで個々のコマンドは実行できますがスクリプトは実行できなくなっています。なので一時的に-ExecutionPolicy Unrestrictedで実行できるようにしています。
-PropertyType ‘String’ -Value ‘~ WIN8RTM’は文字列値の形式でWindows8の互換モードで動かすようにしています。互換モードは他にも設定ができます。
value | 意味 |
---|---|
~ WIN8RTM | Windows8 |
~ WIN7RTM | Windows7 |
~ VISTASP2 | Windows Vista(SP2) |
~ VISTASP1 | Windows Vista(SP1) |
~ VISTARTM | Windows Vista |
~ RUNASADMIN | 管理者として実行する |
注意事項
- レジストリ操作なので設定を間違えると大きな影響が出てしまうので慎重かつ自己責任でお願いします。
- すでに設定済みの端末にバッチを実行すると[このプロパティは既に存在します]とエラーになります。
レジストリに登録されたことを確認
レジストリに登録されたことを確認した場合はファイル名を指定して実行→[regedit]で以下の階層に登録されていることを確認します。
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

今回はAccessですがほかのアプリケーションもフルパスが違うだけで同様の設定ができます。
まとめ
- 互換性設定に関するレジストリの設定は
HKEY_CURRENT_USER\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AppCompatFlags\Layers - 互換性設定を行うアプリケーションのフルパスを-Name(名前)にする。
- 互換性設定の内容は、WindowsのFeatureUpdateで設定が元に戻る。
バージョンアップの度に設定しないといけないのは、結構面倒ですよね!!そもそも互換性モードの設定を行わなくても動作するようにしたほうがいいかもしれません。
コメント