在没有用户交互的情况下使用 wine

在没有用户交互的情况下使用 wine

我想从 shell 脚本运行 Windows 可执行文件(控制台应用程序)。该脚本是自动构建包的更大项目的一部分,因此我需要避免用户交互。

实际上我用的是这样的东西:

export WINEARCH=win64
export WINEPREFIX=/somewhere/$WINEARCH
wine pgen.exe

它基本上可以工作,但存在以下问题:

  1. 如果WINEPREFIX为空(这是第一次运行时的情况),则会出现一个对话框,显示等待配置。我想避免依赖于正在运行的 X 服务器。
  2. 如果之前未安装,wine则会显示一个窗口,要求安装 Gecko 并要求用户干预。
  3. WINEPREFIX需要由调用 wine 的用户拥有,所以我不知道如何提供系统范围的包装器来运行上述应用程序。

除了后一个问题(我可以没有它)之外,其他问题都是阻塞的。最后我只想运行一个控制台应用程序。

答案1

如果您wine使用空运行$DISPLAY,它将跳过显示任何对话框并在没有用户交互的情况下运行:

DISPLAY= wine pgen.exe

为了避免前缀所有权问题,我通常指向WINEPREFIX一个临时目录,以便每次都会重新创建前缀(但这很慢)。

答案2

您可以通过从 X 会话运行一次 Wine 环境来“启动”它,让它配置 mono 等。之后,备份整个.wine目录并将其用作每个需要运行控制台应用程序的用户的基础。

可以xvfb作为虚拟X服务器使用;看这里例如如何自动启动它。然后export DISPLAY=:1在开始酿酒之前。我需要这个来阻止 wine 没有显示器,即使我只运行控制台可执行文件。 YMMV。

我不确定该WINEPREFIX树是否需要由运行 wine 的用户拥有,或者只需要某些位置(例如文件.reg、临时位置)的写入权限。

相关内容