如何在Windows 11中启动phoenix应用程序而不显示终端

问题描述 投票:0回答:1

背景

我正在创建一个简单的 Phoenix 伞应用程序以在客户端的 Windows 11 计算机上运行,我的目标是拥有类似

.exe
文件的文件来运行所述应用程序。

代码

我正在创建应用程序并使用 Elixir 的正常发布程序发布它,使用以下命令:

mix phx.new demo --umbrella --no-ecto --no-dashboard --no-gettext --no-mailer
cd demo_umbrella
mix deps.get

# set MIX_ENV=prod before doing this last step!
mix release demo

对于那些好奇的人,这是我在

releases
中使用的
mix.exs
函数:

  defp releases,
    do: [
      demo: [
        applications: [
          demo_web: :permanent,
          runtime_tools: :permanent
        ],
        include_executables_for: [:windows]
      ]
    ]

现在,这个基本设置将创建一个

.bat
文件:
 _build\prod\rel\demo\bin\demo.bat
,我可以通过以下命令启动和停止:
 _build\prod\rel\demo\bin\demo {start | stop}

问题与研究

懂得编程的用户只需在 Windows 中打开一个终端,输入

 _build\prod\rel\demo\bin\demo start
,应用程序就会启动(可通过 localhost:4000 访问)。

但用户通常没有这样的知识。所以我想要尽可能接近

.exe
文件的东西。

我尝试过使用烤盘:

及其精神继承者,墨西哥卷饼:

不幸的是,两者都无法在 Windows 11 上运行。这促使我尝试快捷方式。 在这里,我创建了

demo.bat
的 Windows 快捷方式,并在目标路径中指定命令:

在这种情况下将是

%windir%\system32\cmd.exe /c start "" "%CD%\demo.bat" start

现在一切都很好,但是有一个问题:

  1. 控制台始终出现。

问题

所以这给我留下了以下问题:

  1. 如何防止控制台显示?
  2. demo.bat
    是否包含运行应用程序所需的erlang VM和elixir版本?或者我需要将它们安装在客户端的计算机上吗?
  3. 我的印象是 Elixir 版本应该包含所需的一切(https://elixir-lang.org/getting-started/mix-otp/config-and-releases.html):

发布版是一个独立的目录,其中包含应用程序代码、其所有依赖项以及整个 Erlang 虚拟机 (VM) 和运行时。组装版本后,只要目标在与组装版本的计算机相同的操作系统 (OS) 发行版和版本上运行,就可以将其打包并部署到目标。

,但是如果这个bat文件不包含所有内容,我该如何解决这个问题?

windows elixir phoenix-framework release
1个回答
0
投票

1.) 防止控制台显示:https://superuser.com/questions/140047/how-to-run-a-batch-file-without-launching-a-command-window

还有这个:

https://superuser.com/questions/62525/run-a-batch-file-in-a-completely-hidden-way

2.) 不,我认为不会。我认为您需要在目标计算机上安装 Erlang VM。我是根据这里的一点经验(尽管自从我尝试在别人的 Windows 机器上部署 Elixir 应用程序以来已经有很多年了)。

3.) 请记住,大多数有关部署 Elixir 应用程序的建议并不适用于 Windows 上的 Elixir。我曾经尝试帮助@bitwalker 在 Windows 上发布版本,但我们两个人始终无法找到令人满意的方法。

如果有某种方法可以在 WSL 下运行应用程序,那么可能会消除一些困难。

4.) 我知道您没有问,但在 Windows 11 机器上启动 Phoenix 服务器可能需要您使用 Windows 服务。这也不是一件小事。

© www.soinside.com 2019 - 2024. All rights reserved.