2019年2月28日木曜日

バッチファイルを管理者権限で実行する方法!!

いやー、苦労しました。

Windows7では楽々出来ていた、たとえば自作DLLをレジストリ登録するバッチファイルの自動実行とかって、Windows 10では出来なくなっているんですよね。

セキュリティがしっかりしているというか、とにかく、普通にバッチファイルを実行するとコマンドがアクセス拒否されます。


■バッチファイルを管理者権限で実行!

ではどうするかというと、実際に自作DLLのレジストリ登録をするバッチファイルを「MAIN.BAT」とすると、そのバッチを管理者権限でコールする親のバッチを「START.BAT」として用意します。

バッチファイル2本かよと思われるでしょうが、長々と難しく書くよりもシンプルに2本に分けた方が後々メンテが分かりやすいかなぁと。



powershell Set-ExecutionPolicy -SCOPE CurrentUser RemoteSigned
powershell start-process (フルパスで)MAIN.BAT -verb runas

↑START.BATは上記のように記述しました。

バッチファイルの中から、PowerShellのコマンドを投げるわけです。

一応、まだPowerShellのコマンドファイルが無効なユーザーのため、有効にするコマンドを最初に投げています。

次が本命で、MAIN.BATを「管理者権限で実行する」実行しています。

RunAsというのが管理者権限というわけです。

これで、今までアクセス拒否食らっていたレジストリ登録なども出来るようになりました。

Windowsって、CMDとPowerShellという新旧二つのコマンドシェルがありますが、どちらか一方だけで良いとはいかないですね。

両方をまんべんなく使わないと、結構落とし穴にはまります。