JavaでVBS管理者権限で実行したいよTomcat
やりたいこと
※Webアプリ上でVBSを管理者権限で実行することで、
権限エラーにならないようにかつUACの通知が表示されないようにしたかった。
やったこと
- eclipseでtomcatサーバーを立てて、サーブレット上でローカルPCのVBSを起動
- VBSでCドライブにファイルを作成する簡単な処理だが、
「書き込みできません」のエラー発生(Cドライブなので権限エラー) - ローカルPCは管理者権限なのになぜ権限エラーになるんと迷走
- ProcessBuilderでjavaからvbsを実行しているので、
一時的に管理者権限で入るコマンドないかなーと調査開始。 - runasをコマンドでやればいけるとすぐに見つかったが、
なかなかうまく動くコマンドが書けず、
苦心の果てに以下コマンドでPowershellを管理者権限で立ち上げてVBSをよびだすことで、VBSを管理者権限で実行することに成功。
powershell -command Start-Process -FilePath PowerShell.exe -ArgumentList "C:\test.vbs" -Verb RunAs
だがしかし、UACの通知のダイアログが立ちはだかり、
「はい」ボタンを押さない限り処理がとまる。
もうやめちくり~(T_T)
UACの通知をどうにか無視するコマンドはないかと懸命に探すが、
結局みつからずセキュリティ上無理だ~と自分を納得させる。
※よくよく調べたらVBSを動かしたい環境(自分のではない)はUACを無効にしていると発覚
なら上記のコマンドで行けるな~と思ったが、一瞬Powershellが立ち上がるのはダメといわれた~泣き泣き(T_T)
そうしてようやくそもそもなんで管理者権限で実行されないんだろうと、
いったん落ち着いて考え直した。
結果
どうやら標準ユーザーでJavaが動いており、
そのためVBSも標準ユーザーで実行され書き込みエラーとなっていた模様。
ローカルのTomcatを右クリックの管理者権限で実行して再度サーブレットを実行したところ( ^ω^)・・・
見事に管理者権限で普通にcscriptコマンドからVBSが起動され、
エラーにならず実行されました~(歓喜)
反省
Webの基礎的な部分(どういう原理でうごいているのかなど)がまだ分かったつもりになってるだけだな~と反省。
それにしてもいくら探してもサーバーを管理者で起動するといった記事が見当たらなかったのは調べ方がやっぱり悪かったのだろうか……はぁ~
ど〇えも~~~~~~~~~~~~~~~~~~~~~~~~~ん