hack のためのネタ帳, etc,,,

状況

20220125: winget - self packaging で installer に .bat を設定できなかったので、.bat を .exe で wrap したい。

解法

.bat .exe wrap」でググってみると、
の機械翻訳されたページを見つけた。

iexpress ってツールで .bat を .exe で wrap 出来るらしい。
なんじゃ?そりゃ?聞いたこと無いツールだし、知名度低い野良ツール入れるの嫌だなーと思いながら
.bat .exe wrap iexpress」でググってみたら、 ってページを見つけたんだが、え!? iexpress って、Windows 標準搭載のツールなの???
マジかー、知らんかったー

これ、自己展開形式のアーカイブ作るツールらしいんだけど、アーカイブするファイルと展開後に実行するファイルを指定することで、自己展開形式の簡易インストーラーが作れるようだ。

で、ウイザード形式なので、適当にポチポチやってたら、サクッと出来たのだが、実行してみると
プロセス <Command.com /c
C:\Users\kou\AppData\Local\Temp\IXP000.TMP\hello.bat> 作
成エラーです。原因: 指定されたファイルが見つかりません。 [OK]

と言われて実行できない。
って、Windows 10 に Command.com なんてないでしょ?
何だ、このレガシーツールは!?

と思い、上で見つけた stackoverflow のページ見てみると .bat 食わせると Command.com 呼ぶから
AppLaunched=hello.bat
じゃなく
AppLaunched=cmd.exe /c hello.bat
にしとけみたいなアドバイスが。

ウイザードで行った設定は .SED (SelfExtraction Directive) ファイルに保存されるので、
それ編集して、
iexpress /N hello.SED
みたいにすれば、.exe の再生成ができるので、
アドバイス通り .SED 書き換えてみたら上手く動いた。

で、「テピタスの参考書」のページではそういうエラー出ずに上手く行ってね?と思い、きちんと読んでみたら、なんか、直接 .bat 呼ばずに .cmd から .bat 呼ぶ二度手間してるのね。

ということで、hello.bat を hello.cmd にリネームして、.SED もそれに合わせてみたら、cmd.exe /c 指定しなくても
AppLaunched=hello.cmd
で大丈夫だった。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます