mattintosh note

どこかのエンジニアモドキの備忘録

2024-06-05: 現在ホビー関連の記事を hobby.mattintosh-note.jp に移行しています。現在掲載されている画像と今後掲載される画像は一部の環境から閲覧できなくなります。

Wine で msi ファイルを開くときの「msiexec /i」を省略できるようにする

Wine で msi ファイルを開く時は…

$ wine msiexec /i hoge.msi

な感じで実行するんですが、bin/msiexec なんてものを発見。これもしかして単体で実行できるんじゃないの?って調べてみたら出来るっぽい。

msiexec - The Official Wine Wiki

というわけで起動スクリプトを書き換えてみた。MacPorts のライブラリを使っている自前の Wine なので PATH とかはちょっと異なります。

#!/bin/bash

export PATH=/usr/local/wine/bin:$PATH
export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib

for x in "$@"
do
  case ${x} in *.msi|*.MSI) exec msiexec /i "$@";; esac
done

exec wine "$@"

引数を順番に調べて *.msi*.MSI にマッチするものがあれば msiexec /i で実行する。exec で実行するのでそれ以降のコマンドは無視。なんとなく気分的に case コマンドをマッチングに使ってみた。

とりあえずこれで…

$ wine foo.msi

だけで msi ファイルを直接実行できるようになりました。