How to work HTA (mshta.exe) in Wine on Linux

HTML Application (HTA)をWineを使いLinux上で実行する方法を記す。

Introduction

ここ数年になって,NW.jsやElectronのように,HTML+CSS+JavaScriptによりデスクトップアプリの開発環境が発展してきた。しかし,15年以上前の1999年から既に似たようなことは可能だった。それがHTAだ。

HTAはMicrosoft Windowsで導入された仕組みである。Internet Explorerを使うことでHTMLをプログラムとして実行することができる。Internet Explorerと一緒にインストールされるmshta.exeがエンジンとなって,HTAは実行される。

HTAには以下の2点の利点があり,非常に魅力的な技術だと感じていた。

  • Windows標準で使える
  • HTAで使えるJScriptやVBScriptが高機能

ただ,一つ残念ところがあった。それはWindowsでしか使えないことだ。せっかくWebの標準技術が使えても,Windowsでしか使えないのはもったいない。

OS標準の開発環境が最も貧弱なのはWindowsであり,このWindowsで使えるHTAが他のLinuxなどのOSでも使えるのなら,HTAは非常に汎用的なプログラムになる。

なんとかして,HTAをLinuxでも実行できるようにしたいと考えていた。幸いなことに,Windows向けのアプリケーションをネイティブ動作させるためのWineというソフトがあり,このソフトでHTAを実行できた。

WineとHTAに関する情報は少ないので,手順を記す。Ubuntu 16.04で動作を確認した。

Method

標準のAPTなどのパッケージマネージャーでインストールしたwine 1.6.2とwineのパッケージマネージャーであるwinetricks 1.8ではバージョンが古いようで,起動しても以下のメッセージが出てしまいHTAを実行できなかった。

wine mshta.exe test.hta
mshta.exe is a stub!

以下のバグレポートで解決策が記載されていたのでこの方法をもとに行う。

WineHQ Bugzilla – Bug 26463 – Multiple applications and games need ‘hta’ file association, reporting ‘There is no Windows program configured to open this kind of file’ (18 Wheels of Steel, HTA Examples)

まず,パッケージマネージャー(APT)でインストールしたwinetricksを一旦アンインストールして,最新のwinetricksをインストールする。

sudo apt remove -y winetricks
cd ~/.local/bin wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks chmod +x winetricks

事前に~/.local/binにPATHを通しておく。winetricksがインストールできたので,mshta.exeの実行元であるInternet Explorerをインストールする。winetricksでインストールできる最新バージョンはIE8である。

winetricks -q ie8

既にIE8がインストールされている場合は,以下のコマンドで強制的にインストールしてもよいかもしれない。

winetrickes --force -q ie8

最後に,以下のコマンドでmshta.exeをレジストリーを登録する。

wine reg.exe ADD HKCU\\Software\\Wine\\DllOverrides /v "mshta.exe" /t REG_SZ /d "native,builtin"

これで動くようになった。この最後のレジストリーの設定が大事なようだ。

試しに以下の内容のtest.htaを作ってみる。

<!DOCTYPE html>
<html lang="ja"> <head> <meta charset="UTF-8" /> <title>HTAのサンプル</title> <script> alert("これはHTAであってHTMLではありません"); </script> </head> <body> <a href="http://myfuturesightforpast.blogspot.jp/">My Future Sight for Past</a> </body> </html>

test.htaをダブルクリックするか,[右クリック]→[Open With Microsoft (R) HTML Application]により,起動できた。その他,以下のコマンドでも起動できた。

wine start test.hta

起動すると以下の画面が表示される。

test.htaの実行結果

なお,以下のコマンドでは起動できなかった。

wine mshta test.hta

しかし,以下のようなメッセージがでて動いているような印象だ。

fixme:thread:InitializeSRWLock (0x5de6b680): stub
fixme:thread:InitializeSRWLock (0x5de6cfe4): stub
fixme:thread:AcquireSRWLockShared (0x5de6b680): stub

Conclusion

LinuxのWine上でHTAを動かす方法について解説した。

実際のところ,Wine上のHTAでどこまでできるかはまだよくわからない。しかし,HTAは有望な技術だと感じている。

Windows 10でbashが使えるようになったからといっても,まだまだWindows 7は現役だ。標準でシェルスクリプトが使えるようになるには,Windows 8のサポートが切れる2023-01-10まで,少なくともあと6年はかかるだろう。

また,シェルスクリプトだと業務で頻繁に使われるExcelファイルの処理は複雑だ。HTAからJScriptなどでVBAのAPIを操作したほうが簡単だ。

それに,HTAを使えばPOSIX原理主義に基づいて交換可能性を担保したGUIを作れる可能性がある。既存のシェルスクリプトのGUIを作ることもできるかもしれない。

HTAのベースはWeb標準技術だ。学んで無駄になることはない。今後もHTAやWSHなどについて調べてみたい。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です