mattintosh note

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

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 ファイルを直接実行できるようになりました。