Wine会自动添加特定的MIME类型和文件关联(例如为.ini文件添加notepad.exe)。已经有一个答案解释了如何移除这些关联。
但是怎样才能阻止Wine再次添加它们呢?
删除现有的Wine劫持(参见Wine FAQ):
rm -f ~/.local/share/mime/packages/x-wine*
rm -f ~/.local/share/applications/wine-extension*
rm -f ~/.local/share/icons/hicolor/*/*/application-x-wine-extension*
rm -f ~/.local/share/mime/application/x-wine-extension*
编辑/usr/share/wine/wine.inf
文件(以root身份),找到[Services]
部分:
[Services]
HKLM,%CurrentVersion%\RunServices,"winemenubuilder",2,"%11%\winemenubuilder.exe -a -r"
...
并将其修改为:
[Services]
HKLM,%CurrentVersion%\RunServices,"winemenubuilder",2,"%11%\winemenubuilder.exe -r"
...
(即启动winemenubuilder.exe
时不带-a
开关)。
这样可以防止在新用户账户(或使用新的WINEPREFIX
)上更新文件关联。
以类似的方式编辑$WINEPREFIX/system.reg
文件(如果存在)。将以下内容中的
[Software\\Microsoft\\Windows\\CurrentVersion\\RunServices]
"winemenubuilder"="C:\\windows\\system32\\winemenubuilder.exe -a -r"
去掉-a
开关。(默认情况下,WINEPREFIX=$HOME/.wine
。)
不想让Windows应用程序的安装程序更改文件类型关联、添加菜单项或创建桌面链接的用户可以禁用winemenubuilder.exe
。有几种方法可以做到这一点:
在 winecfg 中:在运行安装程序之前,先运行 winecfg
。转到“Libraries”选项卡,将 winemenubuilder.exe
输入到“New overrides”框中(它不在下拉列表中)。点击“Add”,然后从“Existing overrides”框中选择它。点击“Edit”,从列表中选择“Disable”,然后点击“Apply”。
注册表文件:如果您需要多次应用此设置(例如,每次重新创建 Wine 前缀时),这种方法可能更方便。创建一个以 .reg 为扩展名的文本文件(例如,disable-winemenubuilder.reg
),其中包含以下内容:
[HKEY_CURRENT_USER\Software\Wine\DllOverrides]
"winemenubuilder.exe"=""
要应用此设置,请运行 regedit disable-winemenubuilder.reg
环境变量:在运行安装程序时设置 WINEDLLOVERRIDES 环境变量,例如:
WINEDLLOVERRIDES=winemenubuilder.exe=d wine setup.exe
C:\Windows\System32\winemenubuilder.exe
:
int main() { /* Do nothing */ return 0; }
winemenubuilder.exe
设置为"native"而不是"disable"。#!/bin/bash
# Workaround for winemenubuilder bloating file associations by default
# Remove all existing associations
rm -f ~/.local/share/mime/packages/x-wine*
rm -f ~/.local/share/applications/wine-extension*
rm -f ~/.local/share/icons/hicolor/*/*/application-x-wine-extension*
rm -f ~/.local/share/mime/application/x-wine-extension*
# Disable winemenubuilder for all existing registries
# Replace ~/.bottles with your prefix/"bottle" directories
for sysreg in $(find ~/.wine ~/.bottles -name system.reg);
do
sed -i 's/winemenubuilder.exe -a/winemenubuilder.exe/' $sysreg
done
/opt/wine-staging/share/wine/wine.inf
。如果文件不在标准位置上,请运行locate wine.inf
来查找它。 - Hi-Angel/opt/wine-stable/share/wine/wine.inf
。 - wyphanupdate-mime-database ~/.local/share/mime/
之后,问题终于解决了。 - Eric Duminil