はじめに
思いつきでLinux環境に自作Windowsアプリを使ってみようとしたら動きませんでした。
本記事ではこの解決方法を記します。
いきさつ
どうやらBottlesというwine用の仮想環境があるようです。
venv
のように環境ごとにパスが存在しており、一つのOS上に複数の環境を作ることができます。
せっかくなので使ってみたのですがなぜか動きません。
Linux+wine, macOS+wineでは動いたアプリだったので確実にBottlesが原因です。
結論
- 仮想環境作成時に存在するMonoと、手動でインストールした.NET Framework 4.8が干渉していた
- ランナーは
sys-wine-10.0
を選ぶ - 仮想環境からMonoをアンインストールする
- そして.NET Framework 4.8をインストールする
- ランナーは
- 実はエラーメッセージはデバッガのウインドウに出ている
- デバッグウィンドウはユーザが操作しない限り表示されない
- いつの間にかデバッガが使えなくなってしまった(Bottlesの自動アップデートのせい?)
※Bottelsのインストール方法は紹介しません。
前提条件
- CPU: x86_64
- OS: Ubuntu 24.04.2 LTS Desktop
- 実行環境: Bottles 51.21
動かない
実際のアプリは載せられないので雑にテスト用のアプリを作りました。見ての通りの動作です。
using System.Windows.Forms;
namespace TestConsole
{
class Program
{
static void Main(string[] args)
{
MessageBox.Show("kuso");
}
}
}
Bottlesの仮想環境は下記の設定、名前以外は全部デフォルトです。
依存関係には
- cjkfonts
- .NET Framework 4.8
をインストールしておきます。ごく普通の構成です。
テストアプリ実行してみてもロードメッセージが出るだけで何も起きません。
エラーメッセージはデバッガに出ていたのですが、いつのまにかデバッガが起動しなくなっていました。
仮想環境の違いではないため、Bottles自身が自動アップデートして動作が変わった可能性があります。
ちゃんとしよう
動く環境を新しく作ります。ランナーをsys-wine-10.0
に変えます。
システムツール類も文字化けするのでcjkfonts
だけインストールします。
「レガシーwineツール」から「アンインストーラー」を表示します。
すでにMonoの類が存在しています。
下記を削除します。
- Wine Mono Runtime
- Wine Mono Windows Support
終わりに
wineとか使わずに普通にネイティブ環境で実行したほうがいいよ。