Hatena::Groupsubtech

NaN days

ブログを移転しています。最新の記事は motemen.hatenablog.com へどうぞ

2010-11-25

HTTP 経由で Windows の JScript を実行できる JScriptHTTPGateway

| 23:22 | HTTP 経由で Windows の JScript を実行できる JScriptHTTPGateway - NaN days を含むブックマーク はてなブックマーク - HTTP 経由で Windows の JScript を実行できる JScriptHTTPGateway - NaN days

d:id:hakobe932 さんや id:cho45 さんが Mac なら Vim 上から iTunes をコントロールできるし!!! とおっしゃっていて、Windows でも WSH などから COM インターフェースが叩けるので、できないことはないですと言ったのですが、普段はその中の VirtualBoxVim を使っているため WSH が使えず結局不便なので、Windows 側にサーバを立てて JScript を実行するサーバを書きました。

Windows 側にはまったく開発環境が揃っていないのですが、.NET Framework が入っていれば csc.exe というのも付属しているらしく、C# であればすぐさま Windows アプリが開発できるということでこれを利用しました。

%WINDIR%\Microsoft.NET\Framework\v3.5\csc.exe /r:Microsoft.JScript.dll JScriptHTTPGateway.cs

としてコンパイルし、

JScriptHTTPGateways.exe +:12345

のようにして起動します。+ は全てのインターフェースというくらいの意味らしいです。

こうしておくと、VirtualBox 内からでも HTTP 経由で

% curl http://hostmachine:12345/ -d 'var itunes = new ActiveXObject("iTunes.Application"); itunes.PlayPause()'

などとできて非常に便利です。-d "return 5*3" とすれば計算機にもなります。

https://gist.github.com/715431

ちなみに、手元の Windows 7 でふつうに起動すると

ハンドルされていない例外: System.Net.HttpListenerException: アクセスが拒否されました。
  場所 System.Net.HttpListener.AddAll()
  場所 System.Net.HttpListener.Start()
  場所 JScriptHTTPGateway.Main(String[] args)

といって死ぬので調べてみると、権限の付与が必要みたいだったので no title の「名前空間予約の構成」に従い、管理者権限の cmd.exe

netsh http add urlacl url=http://+:12345/ user=MACHINE\motemen

とすると起動するようになりました。

もちろん外部に晒していると危険なので使用の際はご注意ください。Mac にしたい。