Windows 7 から 10 に乗り換えたら一部アプリに干渉できなくなる現象が発生、原因は管理者権限だった

Windows 7 から Windows 10 に乗り換えたのですが、一部のアプリケーションに対してホットキーやウィンドウ操作が効かないという現象に遭遇しました。よくよく調べてみると管理者権限が絡んだ挙動だとわかったので、まとめてみます。

※ **(2017/08/26 07:57:42 追記)** 本記事の現象は結局「（Win10では）コントロールパネルだけでは UAC を無効にできない（レジストリもいじる必要がある）」というだけの話です。レジストリのいじり方については末尾に追記しました。

# 前提
- Windows は Home エディション
- 管理者(Administratorsグループ)アカウントを使用している
- UAC は「通知しない（レバーを一番下）」にしている

# 干渉できないということ
Win7 までは管理者権限というと、たまーにインストールやシステム設定変更作業の時に「コマンドプロンプトを管理者権限で起動してコマンドを叩く」くらいの用途でした。

Win10 になるとそうもいかなくなっています。（明確な根拠は見つけられてないのですがおそらく）管理者権限に対する仕様変更が入っています。具体的に言うと、**非管理者権限（管理者権限でない）アプリからは、管理者権限アプリに干渉できない** という制約が追加されました。

例を挙げると、こんなことが起こります（アプリAが管理者権限で起動されているとします）。

- 例(アプリ名も挙げてますが同様のアプリなら何であっても同じ挙動になると思います)
  - 例1: エクスプローラからアプリAにファイルを D&D できない
  - 例2: アプリA上で AutoHotkey によるホットキーや VistaSwitcher によるタスク切り替え(Alt+Tab)が反応しない
  - 例3: アプリA上で Sizer によるウィンドウサイズ変更が効かない

アプリAに干渉したい場合、 **干渉元のプログラムも管理者権限で立ち上げておく必要があります**。

# 指定プログラムを管理者権限で起動する方法
では管理者権限はどうやって付加すればいいのでしょうか。これは **当該実行ファイルの右クリックメニュー > プロパティ > 互換性タブ** から行います。

![adminrights.jpg](https://qiita-image-store.s3.amazonaws.com/0/191170/5054d522-f548-26a4-ed25-69b7c8ddf5ad.jpeg)

ちなみにこの操作、仮に管理者権限を付けたいファイルが n 個あったとしたら、n 回行う必要があります。「管理者権限の付いた実行ファイル一覧を見る」「一覧から自由に付けたり外したりする」といったことは行なえません（もしあったらぜひ知りたいです）。ちょっとだるいですね。

※ちなみに runas というコマンドも使える（？）みたいですが、常に管理者権限で起動させるようにする方法がいまいちよくわからなかったので使ってません。

# Q: 管理者権限で起動しなければええんやろ？何が問題なん？
ここでそもそもの疑問です。

:rabbit: 「管理者権限で起動しなければええんやろ？何が問題なん？」

ということです。そう思っていた時期が私にもありました。

Windows 10 では、レジストリエディタやタスクマネージャなどシステムアプリは **デフォルトで管理者権限として起動されます**。なので、

:rabbit: 「あれ？レジストリエディタやタスクマネージャ上でなんか他アプリの機能が使えないんだけど？」

なんてことが起こります。ホットキーもウィンドウ操作も D&D も、何もかもが効きません。地味に不便です。

この問題を解決するには、**干渉元アプリも管理者権限で起動させる** 必要があります。この例で言うなら、ホットキーやらウィンドウ操作やら D&D 元のアプリやらを管理者権限で起動するということです。

# 管理者権限は伝搬する
私は多数のフリーソフトや自製ツールを使っているので、いちいち管理者権限を付けるのはだるいです。どうにか楽できないかと考えて、以下のやり方を見つけました。

- プログラムランチャ(私の場合 CraftLaunch です)に管理者権限を付与する
- ランチャからアプリを起動すると、そいつにも管理者権限が付いている
  - **管理者権限アプリから起動したアプリもまた管理者権限になります**
- あ、全部ランチャ経由で起動すればいいんじゃね？

これなら管理者権限を付ける作業はランチャだけで済みます。楽です。

私は早速採用しました。が、これがマズかった。

私はランチャ以外からもファイルを開きます。コマンドプロンプトであったり、ファイル名を指定して実行だったり、エクスプローラーだったりしますが、いずれにせよこいつらから開いたファイル、アプリケーションは非管理者権限です。一方で、ランチャから立ち上げたアプリたちは管理者権限……要するに **管理者権限と非管理者権限が入り乱れてしまいました**。

結果として、アプリAからアプリBにD&Dできないとか、操作が効かないといった問題がちらほらと発生するように。その度に干渉元アプリに管理者権限を設定するという作業を繰り返して……今ではどいつが管理者権限でどいつが非管理者権限なのかがわからない状態です :scream: 

別に実害はないのですが、設定をユーザーたる私自身が把握できていない状態がなんとも気持ち悪いんですよね。

# エクスプローラーは管理者権限にできません
気持ち悪いだけなら良かったのですが、そうもいかなかったようです。

今回一番不便だと感じたのは **エクスプローラー(Explorer.exe)を管理者権限にできないこと** です。嘘だと思うなら C:\Windows\explorer.exe の右クリックメニューを見てください。互換性タブがありません。

これの何が問題かというと、**エクスプローラー（デスクトップやフォルダウィンドウ）から、（管理者権限で立ち上げている）他アプリに、ファイルを D&D できない** ということです。

私の場合、愛用の秀丸エディタや XFinder に D&D できません。エクスプローラーはたまに使うので地味に不便です。

# まとめ
まとめます。

## まとめ[1/3] 管理者権限の挙動について
- 非管理者権限アプリは、管理者権限アプリに干渉できない（たとえ管理者ユーザ＆UACオフでも）
  - 干渉の例: D&D、ホットキー、ウィンドウサイズの変更
- 管理者権限アプリから立ち上げたアプリもまた管理者権限になる

## まとめ[2/3] 権限の強制について
- レジストリエディタやタスクマネージャなどシステムアプリは強制的に管理者権限で起動される（ので非管理者権限アプリから干渉できない）
- Explorer.exe には管理者権限を付けることができない

## まとめ[3/3] 指定アプリを管理者権限で開くには
- 実行ファイルの右クリックメニュー > プロパティ > 互換性タブ > 管理者としてこのプログラムを実行する にチェックを入れる
- 「権限を付けたアプリの一覧」を見る方法はないので、設定数が溜まってくると管理が辛い
- よーわからんけど runas コマンドで管理できたりする？

# おわりに
Windows 10 の管理者権限についてまとめてました。経験ベース、観測ベースでまとめただけなので厳密性や根拠には欠けるかもしれません。

## (2017/08/26 07:57:42 追記) コントロールパネルだけでは UAC を無効にできない
補足情報をいだたきましたので追記します。

Win10 では、UAC のレバー（コントロールパネル > ユーザーアカウントから設定するやつ）を一番下に降ろしただけでは UAC が無効になりません。だから本記事で取り上げたような現象が発生していました。

Win10 で無効にするためには、更に以下手順がです。

- レジストリの `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System` にある `EnableLUA` エントリの値を `0` にする
- Windows を再起動する( **シャットダウン→電源オン等ではダメです** )
  - ここ地味にハマりました。「再起動」をしないとダメみたいです :sweat:

これを実行すると、本記事で取り上げている現象は起きなくなります。

ただし副作用があって、一部のビルドインアプリ（電卓など）を起動できなくなります。

参考
- [Windows 10 のUAC無効化 - 眼精疲労的生活](http://siwon-g.hateblo.jp/entry/20160106/1452090966)
- [Windows10でUACを完全に無効にする - シュレ猫のぶろぐ](https://shureneko.blogspot.jp/2015/10/windows10uac.html)