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

mni*_*ess 42 wine mime-type

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

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

小智 58

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

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

    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* 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 编辑/usr/share/wine/wine.inf(以 root 身份),找到该[Services]部分:

    [Services]
    HKLM,%CurrentVersion%\RunServices,"winemenubuilder",2,"%11%\winemenubuilder.exe -a -r"
    ...
    
    Run Code Online (Sandbox Code Playgroud)

    并编辑它,使其显示:

    [Services]
    HKLM,%CurrentVersion%\RunServices,"winemenubuilder",2,"%11%\winemenubuilder.exe -r"
    ...
    
    Run Code Online (Sandbox Code Playgroud)

    (即,winemenubuilder.exe无需-a开关即可启动)。这将阻止更新新用户帐户(或新WINEPREFIXes)上的文件关联。

  3. $WINEPREFIX/system.reg以类似的方式编辑您的文件(如果存在)。它说的地方

    [Software\\Microsoft\\Windows\\CurrentVersion\\RunServices]
    "winemenubuilder"="C:\\windows\\system32\\winemenubuilder.exe -a -r"
    
    Run Code Online (Sandbox Code Playgroud)

    取下-a开关。(默认情况下,WINEPREFIX=$HOME/.wine。)

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

  • 对我来说,路径是`/opt/wine-staging/share/wine/wine.inf`。如果文件位于非标准位置,请运行“locate wine.inf”以找到它。 (3认同)

csc*_*ney 17

来自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"=""
    
    Run Code Online (Sandbox Code Playgroud)

    要应用设置,请运行 regedit disable-winemenubuilder.reg

  • 环境变量:在运行安装程序时设置 WINEDLLOVERRIDES 环境变量,例如,

    WINEDLLOVERRIDES=winemenubuilder.exe=d wine setup.exe
    
    Run Code Online (Sandbox Code Playgroud)

禁用winemenubuilder.exe会导致wine 程序打印出它们找不到的错误(尽管这些错误似乎不会干扰程序运行)。


避免错误的另一种方法是用什么都不做的程序替换它。在 wine 下使用 MinGW 的 gcc 编译以下内容并将可执行文件放在C:\Windows\System32\winemenubuilder.exe

  int main() { /* Do nothing */ return 0; }
Run Code Online (Sandbox Code Playgroud)

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


小智 12

因为这是在谷歌上的第一次命中。Wine FAQ 现在列出了新版本 Wine 的替代方法。

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

  • 这应该是公认的答案。也就是说,它对我不起作用,因为我为我安装的每个 Windows 应用程序创建了一个新的 WINEPREFIX。 (2认同)