gpt4 book ai didi

ruby - 运行 ruby​​w 或使用 ocra 构建的 exe 时弹出 Cmd

转载 作者:数据小太阳 更新时间:2023-10-29 08:57:05 25 4
gpt4 key购买 nike

在此之后: ruby executable won't start ,

现在我遇到了以下简单脚本的另一个问题:

require 'tk'
require 'tkextlib/tile'

root = TkRoot.new()

button = Tk::Tile::TButton.new(root) {text "Hello World"}.grid
button.command {system("ipconfig > info.txt")}

Tk.mainloop()

如果我点击 Hello World 按钮,那么 Windows cmd 控制台将弹出不到一秒钟。上面没有输出,我还尝试将其输出重定向到一个文件并且它是空的。

如果我这样运行脚本:

G:\WinRuby\efdsk>ruby efdsk.rb

没有问题。

所以当我运行用 ocra 构建的 exe 时会出现这个问题,当我像这样运行我的脚本时也会出现这个问题:

rubyw efdsk.rb  

如果我评论以下行,

button.command {system("ipconfig > info.txt")}

问题会消失,所以我认为它与 system() 有关。我还尝试用这个替换上一行:

cmd="ipconfig > info.txt"
Open3.popen3(cmd) {|stdin, stdout, stderr, wait_thr|}

但是当我点击按钮时 cmd 将显示相同。

这是我的 ruby 版本:

ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]

这个问题也会出现在以下 ruby​​ 版本上,由我测试:

ruby 2.1.5p273 (2014-11-13 revision 48405) [x64-mingw32]
ruby 2.0.0p648 (2015-12-16) [x64-mingw32]
ruby 1.9.3p551 (2014-11-13) [i386-mingw32]

我尝试运行 exe 并在其他电脑上编译它,Windows 7 和 10。仍然是同样的问题。

最佳答案

我自己解决的。

首先,我在我的脚本中需要这个:

require 'win32ole'

然后我制作了一个批处理文件,其中包含我需要在文件上打印的命令,在本例中为 ip config > info.txt,我将其命名为 run.bat.

在此之后,我将 system() 替换为以下内容:

WIN32OLE.new('Shell.Application').ShellExecute('run.bat','','','open',0)

这也行:

WIN32OLE.new('WScript.Shell').Run("run.bat",0,0)

这里是 win32ole 的文档

作为第一个参数,我使用了我刚刚创建的批处理文件,最后一个参数 0 成功了。它将新的 cmd 窗口设置为隐藏,因此它不会再次弹出。

我尝试使用 rubyw efdsk.rb 并使用 ocra 构建一个 exe。没有烦人的窗口弹出。

关于ruby - 运行 ruby​​w 或使用 ocra 构建的 exe 时弹出 Cmd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50192638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com