結論
2015年11月28日現在、依存関係にあるgithub.com/lxn/winのopengl32.goとpdh.goを削除した上で、GOPATH上でgo buildすればWALKのサンプルアプリの動作を確認できました。
手順
WALKをインストール済みかどうかで使えるようになる手順が異なります。
共通
- Goをインストール
- ユーザー環境変数GOPATHに「%USERPROFILE%.go」を設定
WALKをインストールしていない場合
-
フォーク版の依存ライブラリをインストール
git clone https://github.com/takumin/win.git %GOPATH%\src\github.com\lxn\win
-
WALKをインストール
go get github.com/lxn/walk
-
サンプルアプリで動作確認
WALKをインストールしてある場合
-
一旦依存ライブラリを削除
rd /s /q %GOPATH%\src\github.com\lxn\win
-
フォーク版の依存ライブラリをインストール
git clone https://github.com/takumin/win.git %GOPATH%\src\github.com\lxn\win
-
WALKをインストール
go get github.com/lxn/walk
-
サンプルアプリで動作確認
動作確認
改めて要件
- Windows PEで動くGUIを作りたい
- できればWindows APIを直に触りたくない
選定理由
- GoいいよGo
- WindowsフォームなのにWALKの実装めっちゃスマートやんけ!
- さらにCOM触れるとかもうCでヒーヒー言いながらやる必要ないんや!
背景
※ここからは記事を起こすに至った経緯を書いてあるだけのほぼ日記もといチラ裏なので、結論を求めている方は上のフォークレポジトリをお試しください。
個人ユースではあまりニーズがないと思われますが、DHCPサーバからiPXE+wimbootなどでWindowsインストールを自動化している場合、主にセットアップスクリプトにはDOSバッチかPowerShellを用いられているかと思います。
自分一人で使っている場合には問題になりませんが、家族などに操作をお願いする場合、カッコ悪いコンソールは見せたくありません。コマンド入力も頼み辛いですし。
そこでGDIが使えるWindows PEならWindows APIを叩けばそこそこマシなセットアップ画面を出せるだろうと画策したのですが、ゆとり世代にはWindows APIの立ちはだかる壁に辟易してしまい、結局のところコンソールセットアップから脱出出来ていませんでした。
(書きながら気がついたのですが、Windows PE上で.Netアプリを動かしていないので、もしかしたら.Netだけで要件は満たせるのかも)
...あれから3年以上たった今、私達の手元にはGo言語のポータブル性とWindowsフォーム描画をうまいことラッピングしてくれるWALKがあります。
確か1年前くらいに試した時は動かない & OS XやLinuxを触っていたこともあり、やはりコンソールから抜け出せていませんでした。そもそもGo言語の知見が溜まっていなかったのと、エラー画面に頭がフリーズしていたのが一番の問題です・・・。
ここ最近は組み込み系の開発を担当しているので、ますますLinux(のCLI)に引きこもっていたのですが、コーディング担当のメンバーが新しく参加することになり、Eclipseの設定やらを自動化したいという欲求が出てきました。
そういった意味のモチベーションとしてはChocolatyに似た何かを作ろうとしている最中ではあるのですが、どうせならWindows 10の自動セットアップ環境を見なおそうと思いたち、WALKが動かない原因を探ってみようと考えた訳です。
まずはサンプルアプリをビルドし、Windows PE上で実行したところ、エラー画面にはopengl32.goとpdh.goのMustLoadLibrary()が失敗しているような感じでした。
まずWALKから呼び出されていないことを確認し、とりあえずファイルを削除したところ、問題なく動いてしまいました!アルェー?/(^o^)\
本来なら依存関係にある何かがおかしくなってしまったりといったマイナス方向の予想をしていたのですが、Go言語のシンプルさと作者様のコーディングが良いおかげでスピード解決したのでした。1年前気づけよ・・・。
ということで、実際に動くアプリを手に入れた事もありますので、ここからWindowsフォームをガワにして色々と遊んでみようと思います。
日々Go言語やWindows PEを触られている諸氏におかれましてはモヒカンが斧を振り上げるがごとく、今後ともご指導ご鞭撻賜れますよう、よろしくお願い申し上げます。