在Windows中使用lua os.execute启动一个没有CMD闪存的程序

时间:2011-06-15 18:58:49

标签: windows lua command-prompt

我很高兴使用

在Lua的Windows系统中启动程序
strProgram = '"C:\\Program Files\\Ps Pad\\PSPad.exe"'
strCmd = 'start "" '..strProgram
os.execute(strCmd)

这样可以正常工作,启动程序和脚本完成。 然而,如果它在几分之一秒内闪现命令窗口,那么任何人都可以从Lua启动程序。

3 个答案:

答案 0 :(得分:7)

Lua的os.execute命令基于C标准库“shell”函数。在Windows中,此函数将始终创建一个命令窗口,它将始终停止当前进程,直到窗口完成。后者也发生在Linux中。

最终无法解决这个问题。不是通过Lua标准API。由于Lua需要轻量级且与平台无关,因此不允许API使用依赖于操作系统的本机API。

您最好的选择是使用Lua Ex-Api模块。它实际上是放弃软件,你可能需要修补一些编译器问题(我猜测Windows端口不是他们的首要任务)。但它是产生进程的一种相当好的方法。您可以选择等到自己完成,或让它们并行运行。并且它不会抛出命令提示符窗口,除非应用程序本身使用它。

答案 1 :(得分:1)

这是我用来从Lua调用批处理的代码段,也许是帮助。 在win控制台(命令提示符)中打开并执行,同样在unix(mac | nix)

General -> Processing -> Automatically open the Report window before starting a processing task

答案 2 :(得分:0)

这是一种仅使用Lua标准API(即没有额外的库)运行没有控制台窗口的命令的方法。在Win7 x64上测试。

function exec_silent(command)
    local p = assert(io.popen(command))
    local result = p:read("*all")
    p:close()
    return result
end

编辑:请参阅下面的评论,它可能不适用于所有人。我不确定为什么。