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

| 我很乐意使用Lua在Windows系统中启动程序
strProgram = \'\"C:\\\\Program Files\\\\Ps Pad\\\\PSPad.exe\"\'
strCmd = \'start \"\" \'..strProgram
os.execute(strCmd)
这可以正常运行,启动程序并完成脚本。 它怎么会在命令窗口中闪烁几分之一秒,有没有人能从Lua中启动程序?     
已邀请:
        Lua的os.execute命令基于C标准库“ shell”功能。在Windows中,此函数将始终创建命令窗口,并且将始终停止当前进程,直到该窗口结束。后者也发生在Linux中。 最终,这没有办法。不通过Lua标准API。由于Lua必须轻巧且不依赖平台,因此该API不允许使用与操作系统有关的本机API。 最好的选择是使用Lua Ex-Api模块。它实际上是废弃软件,您可能需要修补一些编译器问题(我猜Windows端口不是其首要任务)。但这是产生进程的相当不错的方法。您可以选择等到完成为止,或者让它们并行运行。除非应用程序本身使用一个,否则它不会抛出命令提示符窗口。     
        这是我用来从Lua调用批处理的代码段,也许有帮助。 在Win控制台(命令提示符)中打开并执行,与在UNIX(mac | nix)中相同
-- sBatchFile = .bat for windows, .sh for x
function vfFork2(sBatchFile)
    local b = package.cpath:match(\"%p[\\\\|/]?%p(%a+)\")
    if b == \"dll\" then 
        -- windows
        os.execute(\'start cmd /k call \"\'..sBatchFile..\'\"\')
    elseif b == \"dylib\" then
        -- macos
        os.execute(\'chmod +x \"\'..sBatchFile..\'\"\')
        os.execute(\'open -a Terminal.app \"\'..sBatchFile..\'\"\')
    elseif b == \"so\" then
        -- Linux
        os.execute(\'chmod +x \"\'..sBatchFile..\'\"\')
        os.execute(\'xterm -hold -e \"\'..sBatchFile..\'\" & \')
    end 
end 
    
        这是一种仅使用Lua标准API(即没有额外的库)而无需控制台窗口即可运行命令的方法。在Win7 x64上测试。
function exec_silent(command)
    local p = assert(io.popen(command))
    local result = p:read(\"*all\")
    p:close()
    return result
end
编辑:请参阅下面的评论,它可能不适用于所有人。我不确定为什么。     

要回复问题请先登录注册