如何防止 Wine 添加文件关联?

如何防止 Wine 添加文件关联?

Wine 会自动添加某些 mimetype 和文件关联(例如,notepad.exe 用于 .ini 文件)。已经有一个回答解释了如何删除这些关联。

但是如何才能防止 Wine 一遍又一遍地添加它们呢?

答案1

完全禁用 winemenubuilder.exe 将阻止 wine 劫持您的文件关联,但也会阻止它为新安装的软件创建菜单项,这可能是不受欢迎的行为。更好的解决方案是:

  1. 删除现有的 Wine 劫持(来自葡萄酒常见问题解答):

    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* 
    
  2. 编辑/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)。这将阻止在新用户帐户(或新WINEPREFIXes)上更新文件关联。

  3. 以类似的方式编辑你的$WINEPREFIX/system.reg文件(如果存在)。其中显示

    [Software\\Microsoft\\Windows\\CurrentVersion\\RunServices]
    "winemenubuilder"="C:\\windows\\system32\\winemenubuilder.exe -a -r"
    

    移除-a开关。(默认情况下为WINEPREFIX=$HOME/.wine。)

这将防止 wine 窃取您首选的 mimeapps,但 winemenubuilder 仍将运行并为您的 Windows 软件创建方便的桌面条目。

答案2

http://wiki.winehq.org/FAQ

如果用户不希望 Windows 应用的安装程序更改文件类型关联、添加菜单项或创建桌面链接,则可以禁用winemenubuilder.exe。有几种方法可以做到这一点:

  • 在 winecfg 中:在运行安装程序之前,请运行winecfg。转到“库”选项卡并winemenubuilder.exe在“新覆盖”框中键入内容(它不在下拉列表中)。单击“添加”,然后从“现有覆盖”框中选择它。单击“编辑”并从列表中选择“禁用”,然后单击“应用”。

  • 注册表文件:如果您需要多次应用设置(例如每次重新创建 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
    

禁用winemenubuilder.exe将导致 wine 程序打印无法找到的错误(尽管这些错误似乎不会干扰程序操作)。


避免错误的另一种方法是将其替换为不执行任何操作的程序。使用 Wine 下的 MinGW gcc 编译以下内容,并将可执行文件放在C:\Windows\System32\winemenubuilder.exe

  int main() { /* Do nothing */ return 0; }

然后按照与上述相同的步骤,但设置winemenubuilder.exe为“native”而不是“disable”。

答案3

由于这是 Google 上的第一个搜索结果。Wine FAQ 现在列出了新版 Wine 的替代方法。

“从 wine-3.14 开始,winecfg 在桌面集成选项卡上有一个“管理文件关联”复选框。选中它可以启用 winemenbuilder 创建文件关联,取消选中它会禁用该行为。”

答案4

Gentoo要使此更改永久生效,您可以创建一个用户补丁自动应用于每个 wine 包的安装。

/etc/portage/patches/app-emulation/wine-vanilla/disable-winemenubuilder.patch

# disable updating file associations for mimetypes that generate much joy
# making wine-internet-explorer open images, for example.
#
# don't forget to clean up your home directory from previously generated association clutter:
#
# rm ~/.local/share/mime/packages/x-wine*
# rm ~/.local/share/applications/wine-extension*
# rm ~/.local/share/icons/hicolor/*/*/application-x-wine-extension*
# rm ~/.local/share/mime/application/x-wine-extension*
#
# then run: update-mime-database ~/.local/share/mime/

--- a/loader/wine.inf.in    2024-02-23 16:57:31.079889523 +0100
+++ b/loader/wine.inf.in    2024-02-23 16:58:26.122973075 +0100
@@ -2493,7 +2493,7 @@
 ErrorControl=1
 
 [Services]
-HKLM,%CurrentVersion%\RunServices,"winemenubuilder",2,"%11%\winemenubuilder.exe -a -r"
+HKLM,%CurrentVersion%\RunServices,"winemenubuilder",2,"%11%\winemenubuilder.exe -r"
 HKLM,"System\CurrentControlSet\Services\Eventlog\Application",,16
 HKLM,"System\CurrentControlSet\Services\Eventlog\System","Sources",0x10000,""
 HKLM,"System\CurrentControlSet\Services\Tcpip\Parameters","DataBasePath",,"%12%\etc"

相关内容