2015/07/14

WineでMicrosoft .NET Frameworkを使用する

Wineでは “Wine Mono” と呼ばれるアドオンパッケージをインストールすることでMono/.NETアプリケーションが動作するようになるが、ソフトウェアによっては正しく動作しない。代わりにMicrosoftの “.NET Framework” と呼ばれるランタイムパッケージをインストールすることで動くようになるものもあるが、問題なく動作するかどうかはソフトウェアによる。

ここでは同ランタイムパッケージを

で扱ったWinetricksを用いてインストールする方法についてを扱う。

  1. Wine環境に関する注意点
  2. インストールするパッケージ
    1. パッケージの依存関係に関する注意点
    2. バージョン2.0以上をインストールする場合の注意点
    3. バージョン3.0以上をインストールする場合の注意点
      1. .NET Framework 3.0のインストーラのダウンロード
      2. .NET Framework 3.0のインストーラの終了手順と不具合対処
    4. バージョン3.5以上をインストールする場合の注意点
      1. .NET Framework 3.5のインストーラにおけるmsxml3の不具合回避処理
      2. msxml3のダウンロードとインストール
  3. まとめと作業例

Wine環境に関する注意点

で扱ったWine環境について、2015年夏時点のWinetricksでは64bit/32bit両対応のものに対してインストールすることができないため、同記事内で扱っている方法で32bit専用の環境を作成する必要がある。

また、パッケージ群[1]のインストールが途中でキャンセルもしくは失敗するとやり直すのが難しいため、既に何かのソフトウェアで使用している環境を使用するのはおすすめできない。.NET Framework用にWine環境を1つ用意するのが好ましい。

インストールするパッケージ

選択するパッケージ名はバージョンごとに分かれているが、注意点がある。

パッケージ名バージョン
dotnet111.1
dotnet11sp11.1 SP1
dotnet202.0
dotnet303.0
dotnet30sp13.0 SP1
dotnet353.5
dotnet35sp13.5 SP1
dotnet404.0
dotnet454.5

パッケージの依存関係に関する注意点

バージョン番号については、選択したものよりも低いバージョンのもの(1.1系は除く)が同時にインストールされる場合が多い。例えば、 “dotnet35” をインストールすると3.0 SP1までのバージョンもインストールされる。

それと同時に、同一のWine環境に対しては、バージョンが異なる複数の “dotnet” 系パッケージをインストールすることができない(パッケージの衝突が起こる)場合がある。

ただし “dotnet40” は上記2つには当てはまらず、単独でインストールすることができる。

色々なバージョンのランタイムパッケージが必要な場合は、利用できる中で一番高い(新しい)バージョンのパッケージをインストールするのがよい。

一連のパッケージ群は全てキャンセルや失敗することなく最後まで正常にインストールされなければならず、途中で中止された場合は(インストール済みパッケージとの衝突などの関係で)Wine環境の作成からやり直す必要がある。

バージョン2.0以上をインストールする場合の注意点

バージョン2.0のインストーラはWineのバージョン1.6.2では正常に動作せず

インストールパッケージを開けませんでした。アプリケーション開発元に連絡して、このパッケージが有効なWindows インストーラ パッケージであることを確認してください。

というダイアログが表示されて処理が中止されるが、バージョン1.7.44時点では正しく動作する。

バージョン3.0以上をインストールする場合の注意点

.NET Framework 3.0のインストーラのダウンロード

古いバージョンのWinetricksでは、バージョン3.0のダウンロードファイルは取得URLの関係でMicrosoft以外のサイトから手動でダウンロードして指定ディレクトリに配置する必要があったが、Wayback MachineのURLを指定するようにするパッチを2015年7月中旬に(GitHubのリポジトリに)取り込んでもらうことができたので、これよりも後に公開されたバージョンでは自動的にダウンロードされる。

.NET Framework 3.0のインストーラの終了手順と不具合対処

バージョン3.0のインストーラは実行するとシステムトレイに通知バルーンを表示して常駐し、自動的には終了しないため、インストール終了の通知が表示されたらシステムトレイアイコンのコンテキストメニューの “終了” を選択する必要があるあるいは、(全パッケージのライセンスに同意しているのが前提となるが)Winetricks-q(--unattended)オプションを付けて実行する(このインストーラを含む全てのインストーラが非対話的に実行されて自動的に終了する)。

Ubuntuでカーネルに関係したバグによってインストールに失敗する場合は

$ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
(もしくは)
$ sudo sh -c 'echo 0 > /proc/sys/kernel/yama/ptrace_scope'

のいずれかを実行することで回避できるようだが、手元のUbuntu 15.04上のWine 1.7.44ではインストール終了の通知まで進んでいるため、効果があるかは未確認。

バージョン3.5以上をインストールする場合の注意点

.NET Framework 3.5のインストーラにおけるmsxml3の不具合回避処理

バージョン3.5のインストーラはWineにおける “msxml3” ライブラリのバグ[2]によりそのままでは正しく動作せず、回避策としてWindowsネイティブ版の “msxml3” ライブラリが必要となっている[3]

msxml3のダウンロードとインストール

このパッケージもWinetricksでインストール可能(自動的に選択される)となっており、古いバージョンのWinetricksではファイル取得URLの関係でMicrosoft以外のサイトから手動でファイルをダウンロードして指定ディレクトリに配置する必要があったが、こちらも2015年7月中旬にパッチを取り込んでもらうことができたので、これよりも後に公開されたバージョンでは自動的にダウンロードされる。

この “msxml3” のインストーラもバージョン1.6.2のWineでは正しく動かないが、バージョン1.7.44時点では正しく動作する。

まとめと作業例

  • .NET Framework専用の
  • 32bit用のWine環境を新規に用意して
  • 最新のWineWinetricksを用いて
  • 色々なバージョンに対応させる必要があれば一番新しいバージョンのパッケージを指定する
  • バージョン3.0のインストーラはシステムトレイアイコンから終了し、Ubuntuで不具合が起きたら/proc/sys/kernel/yama/ptrace_scopeを “0” にする
  • 途中でキャンセルもしくは失敗した場合はWine環境作成からやり直す
  • Winetricks-qオプションを付けて実行するとインストーラの操作が不要(全パッケージのライセンス同意が前提)

下はインストール作業とアセンブリ実行の例。

(Wine環境の上のディレクトリがない場合に作成)
$ test -d ~/wineprefixes || mkdir ~/wineprefixes/

(専用の新しいWine環境へ2.0から4.5までを非対話的にインストール)
$ rm ~/wineprefixes/dotnet -fr
$ XDG_CACHE_HOME=/path/to/cachedir WINEARCH=win32 WINEPREFIX=~/wineprefixes/dotnet winetricks -q dotnet45

(Mono/.NETアセンブリを実行)
$ WINEPREFIX=~/wineprefixes/dotnet wine /path/to/assembly.exe
使用したバージョン:
  • Wine 1.6.2, 1.7.44
  • Winetricks 2015/7/13
[1]: 多くの場合で複数のパッケージがインストールされることになり、幾つかのインストーラを次々と動かしていく作業となる
[2]: バグが存在するのはバージョン1.5.25以上のみで、バグの発生したパッチも特定されており、同パッチの作者によるこの問題の修正もアップロードされているが、根本的解決となるような好ましいパッチではないとの記述が理由付きであり、その後2年余り経過するも解決には至っていない
[3]: インストーラの実行でのみ必要なので、その後Wine版を使用するように設定しても可