サイト管理人Blog

cloudfreeで「さぁ始めましょう♪」

作業効率倍増ランチャーを作る(2/3)

2023-11-07 記載
概要 : HTMLページ1枚にあらゆるOpen処理を集約させたランチャーの作成
前後の記事:(1/3), (3/3)
Keyword : プロセス起動, Apache, PHP, runas,

Apacheから呼ばれたPHPにプロセス起動をしてもらっても、画面をデスクトップに出してくれませんでした。その経緯を書いておきますと。

まずはもっともオーソドックスな exec()
test.php に exec(“notepad.exe”); とだけ書いて、DOS窓で php shell.php で起動を確認。これはOK。
しかしこのtest.php を http://localhost/test.php から呼んだら立ち上がってこず。
パスが悪い?と思い、notepad.exe を絶対パスで指定してもダメ。

次に試したのはCOMを使う書き方。

$WshShell = new COM(“WScript.Shell”);
$oExec = $WshShell->Run(“notepad”, 5, true);

しかしエラー。

Fatal error: Uncaught Error: Class “COM” not found in ……

調べると、Class “COM”を使うには、php.iniで
extension=php_com_dotnet.dll
が必要とのこと。
\ext に php_com_dotnet.dll があることを確認してiniを編集。Apache Restart。

しかしこれでも画面は出てこず。
タスクマネージャの詳細タブで確認するとプロセス起動はできています。
ただしユーザーがSYSTEM なのです。
さらに調べて、ユーザーを指定してプロセス起動するには
runas
だと判明。

$WshShell = new COM(“WScript.Shell”);
$WshShell->Run(“runas /savecred /user:myname notepad.exe”, 5, false);

コンソールで試すとパスワードを問うてきたので、空だよ、とEnterしたら、空はダメですと言う。わざわざパスワードを設定して、試したら開けました。/savecred も効かせました。
これをhttp経由で、としたら反応なし。パスワードを問うてる見えない画面でとまっているのか?と想像するも打つ手なし。そうだパスワードを空にしたらその画面で止まらないのでは?と思い、再び空にしてローカルセキュリティポリシーでログイン以外でも空を認める設定をして、今度こそと試しましたがそれでも画面は出てこず。

コントロールパネル→[システムとセキュリティ]→[管理ツール]→
[ローカルセキュリティポリシー]→[ローカルポリシー]→[セキュリティオプション]→
[アカウント: ローカルアカウントの空のパスワードの使用をコンソールのログオンのみに制限する]

Apacheサービスのプロパティにデスクトップとの対話を許可、このチェックを入れたらパスワードを入れる画面が出るのでは?とか、いっそうのことApacheサービスを自分アカウントで稼働させようか?下策だけどこれならとりあえず動くはず、とやってみたらそれでもダメでした。

もう参りました。
こうなったらあの手を使うか、と頭の片隅にあったある手段に着手しました。

それはHTML段階での仕込み。
<a href=”ms-excel:ofe|u|http://localhost/helper.xlsm”>でURI呼び出しする前に Ajax(javascriptのXMLHttpRequest)でlocalhostの.phpを呼びExcelに渡してもらいたいパラメータを、Apache24/htdocs/cmd.txt ファイルに出力してもらうというもの。
で、Excelマクロは起動したらそのファイルを読み込み、パラメータに従って処理をする。
画面は出てこなくてもファイルなら隠せないはず。

結果から書くとそれでようやく成功しました。
それは つづき で。

投稿へのコメントは コチラ(掲示板) へお願いします。

サイト管理人Blog