[PR]

runas 以外の verb でも管理者として実行する

うう、すいません、この記事は間違っていましたので修正しましたのです。

runas については「コンテキストメニューに「管理者として実行」を追加する」を参照。

そもそも管理者として実行したいのはどのプロセスなのか。例えば verb が edit でそのコマンドが %SystemRoot%\system32\NOTEPAD.EXE %1 という感じなら、メモ帳を管理者として実行すればいい。つまり notepad.exe を runas で実行するコマンドラインを edit のコマンドに記述すればいい。

あとは Start-Process コマンドレットを使えば任意の verb でプロセスが実行できますので、それでメモ帳とかを runas で実行すると。

それでそのコマンドラインなんですけど、ちょっと PowerShell の実行の方法が微妙にうまくいかなくて、えっと PowerShell のディレクトリには Path が通っているので powershell で呼び出せるだろうと思ったんですけど、レジストリに記述してみると起動してくれないんです。まあいいか。仕方ないのでフルパスで指定しますと下のようになります。

C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell -command "& {start 'exefile' -verb runas -argumentlist 'parameters'}
C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell -command start \"exefile\" -verb runas -argumentlist \"parameters\"

exefile に notepad とかを指定して parameters に %1 とか指定します。

環境変数を使えばもう少し短くなりますけど、値を REG_EXPAND_SZ にするのがめんどくさい[1]。短くなればなんでもいいなら次のような方法もあります。

cmd /s /c "powershell -command "& {start 'exefile' -verb runas -argumentlist 'parameters'}""
cmd /s /c "powershell -command start \"exefile\" -verb runas -argumentlist \"parameters\""

レジストリ以外からは普通に powershell で呼び出せるようなので。まあこういう方法もあるみたいな。

場合によってはもっと簡単になります。例えば open を管理者権限で実行したいというのが、デフォルトの動作(ダブルクリック時とか)のコマンドを管理者権限で実行したいということなら、デフォルトの verb を runas にするほうが楽です。この場合 shell キーの既定に runas って記述するだけで済みます[2]

  1. ^ いいかげん regedit で既定に REG_SZ 以外も扱えるようにしてほしいんですけど。仕様なの?
  2. ^ この方法で、ファイルを開くときのコマンドを任意の verb で実行できます。詳しくは「ファイルをダブルクリックしたときの動作を open 以外の verb にする」を参照。

Post a comment

Sponsored Link
Information
Menu
アンケート
Sponsored Links
Links
Mail Form

名前:
メール:
件名:
本文: