背景
- Linux でも Vulkan + Windows アプリ(C++)を動かしたい
- Windows アプリ: COFF バイナリを想定
自身の file path を Windows アプリ 側で見せるには,
WINE とは?
エミュレータではありません. COFF バイナリ直実行環境というのが正しいでしょうか?
古い Windows アプリは動かせるかもしれませんが, 新しめのとかは難しそうです.
基本的には Linux で Vulkan アプリを GPU アクセラレートさせてうごかしたいとか, COFF バイナリをコマンドラインでバッチ処理したいとかの開発者向けと考えたほうがよいでしょう.
普通に Windows アプリ(Office とか, Visual Studio とか, e-Tax ソフトとか)を動かしたいのであれば, 仮想環境(e.g. VirtualBox) をおすすめします.
Linux で ./exe
直実行
Explorer
winefile or wine explorer
で, Explorer 相当
APPDATA
Wine 自体は XP 相当っぽいようです.
%APPDATA%
は Win7, Win10 とちょっと違うところにあります.
winecfg
で, Wine の動作を Win10 モードにすると変わるかも?
Start メニューやデスクトップ
Wine 自体では, Start メニューや Desktop shortcut あたりはそんなには対応していないようです.
別アプリを使えば行けるかも?
一部インストーラーではうまくインストールできなかったりするかもです.
ファイルパス
Linux ですと,
z:
が /
にマッピングされています. Linux 側のファイルシステムを Windows アプリ側にマッピングするときに役立ちます.
winepath C:\
などで, Linux のどこにマッピングされているか確認できます.
通常は,~/.wine/dosdevices
が基点になっています.
wineprefix
で変更することができます.
PATH 変数など
Windows での PATH 変数は, WINEPATH
環境変数で設定(複数 PATH は ;
で区切る)します.
Wine PATH through command line and not persistent
https://stackoverflow.com/questions/7249791/wine-path-through-command-line-and-not-persistent
永続的に設定したい場合は registory を設定するしかないようです(WINE 用の環境変数エディタはないかしらん?)が, WINEPATH を設定して起動する bash script つくるか, batch ファイル作ってそこに PATH 追加したりしたのを起動させるで対応が現実的なところでしょうか.
その他の Linux の環境変数は, WINE 環境に引き継がれます.
dll path
WINEDLLPATH
だとビルトインの dll だけでした..
.exe と同じディレクトリに .dll を置くか,
WINEPATH により, (Windows 側での) PATH
変数で dll へのパス設定する必要があります.
Linux 側(Linux bash 側)ですと
$ WINEPATH="C:/Users/syoyo/lib" ./a.exe
のようになります. PATH
変数は Windows の流儀に従うので複数の場合は ;
で区切ります.
あんまり試していないので正しいかわかりませんが, デフォルトの %PATH%
も含めたいときは以下のような感じでしょうか.
$ WINEPATH="%PATH%;C:/Users/syoyo/lib" ./a.exe
ちなみに backslash はエスケープせずに使えました. 空白も同様にエスケープせずに使えると思われます.
# OK
$ WINEPATH="%PATH%;C:\Users\syoyo\lib" ./a.exe
WINPREFIX
より広範囲に環境を切り替えて(dlls 群や app 群を切り替えて使いたいなど) Wine うごかしたい場合は, WINEPREFIX がよさそうです!