json 终端进程终止,退出代码为:1

pn9klfpd  于 2022-11-19  发布在  其他
关注(0)|答案(4)|浏览(294)

我想使用Visual Studio代码IDE(“VSC”)在MQL中(而不是在本机MetaEditor IDE中)进行开发,如下所述:How to code & compile MQL5 in Visual Studio
我的问题涉及到编译过程,该过程由一个VSC任务组成,该任务调用PowerShell脚本,该脚本调用MetaEditor.exe来执行实际的编译。
当我直接运行PowerShell脚本(通过选择其代码并按F8)时,一切正常,但当我尝试通过指定的VSC任务运行它时,却出现错误
终端进程终止,退出代码为:1
(在我选择PowerShell作为默认shell之前,如链接的描述中所述)。
这是PowerShell脚本(使用F8):

#gets the File To Compile as an external parameter... Defaults to a Test file...
Param($FileToCompile = "C:\Users\Username\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\Advisors\ExpertMACD.mq5")

#cleans the terminal screen and sets the log file name...
Clear-Host
$LogFile = $FileToCompile + ".log"
& "C:\Users\Username\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\compile.bat" "C:\Program Files\MetaTrader 5\metaeditor64.exe" "$FileToCompile" "$LogFile" "C:\Users\Username\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5"

#before continue check if the Compile File has any spaces in it...
if ($FileToCompile.Contains(" ")) {
    "";"";
    Write-Host "ERROR!  Impossible to Compile! Your Filename or Path contains SPACES!" -ForegroundColor Red;
    "";
    Write-Host $FileToCompile -ForegroundColor Red;
    "";"";
    return;
}

#first of all, kill MT Terminal (if running)... otherwise it will not see the new compiled version of the code...
Get-Process -Name terminal64 -ErrorAction SilentlyContinue |
    Where-Object {$_.Id -gt 0} |
    Stop-Process

#fires up the Metaeditor compiler...
& "C:\Program Files\MetaTrader 5\metaeditor64.exe" /compile:"$FileToCompile" /log:"$LogFile" /inc:"C:\Users\Username\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5" | Out-Null

#get some clean real state and tells the user what is being compiled (just the file name, no path)...
"";"";"";"";""
$JustTheFileName = Split-Path $FileToCompile -Leaf
Write-Host "Compiling........: $JustTheFileName"
""

#reads the log file. Eliminates the blank lines. Skip the first line because it is useless.
$Log = Get-Content -Path $LogFile |
       Where-Object {$_ -ne ""} |
       Select-Object -Skip 1

#Green color for successful Compilation. Otherwise (error/warning), Red!
$WhichColor = "Red"
$Log | ForEach-Object {
    if ($_.Contains("0 error(s), 0 warning(s)")) {
        $WhichColor="Green"
    }
}

#runs through all the log lines...
$Log | ForEach-Object {
     #ignores the ": information: error generating code" line when ME was successful
     if (-not $_.Contains("information:")) {
          #common log line... just print it...
          Write-Host $_ -ForegroundColor $WhichColor
     }
}

#get the MT Terminal back if all went well...
if ($WhichColor -eq "Green") {
    & "c:\program files\metatrader 5\terminal64.exe"
}

这是. json格式的VSC任务,它应调用前面的PowerShell脚本(但以上述错误结束):

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Compile-MQL",
            "type": "shell",
            "command": "C:\\Users\\Username\\AppData\\Roaming\\MetaQuotes\\Terminal\\D0E8209F77C8CF37AD8BF550E51FF075\\MQL5\\Compile-MQL.ps1 ${file}",
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared",
                "showReuseMessage": false
            },
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

有人能告诉我如何消除这个错误吗?
PS:要重现这个问题,MetaTrader(包括MetaEditor IDE)需要downloaded (for free)

wwtsj6pe

wwtsj6pe1#

我遇到这个问题是因为我不小心删除了tsconfig.json

h7appiyu

h7appiyu2#

我有和你一样的问题(我用的是windows 10)。
请尝试以下操作:
1.如果您的计算机正在运行powershell,请将其关闭。
1.控制面板-〉程序-〉打开或关闭Windows功能
1.搜索Windows Powershell 2.0-〉取消复选框-〉确定
1.重新启动

我希望这能帮到你

bxfogqkk

bxfogqkk3#

这可以使用F8的原因是因为您已经在PowerShell会话中,因此将在本机运行。使用您的任务,您将尝试在不启动PowerShell的情况下运行.ps1。
一个任务运行是一个任务运行,您正在运行的其他任务的细节(开关、参数等)可能有其自身的需要。但是,您的查询可能会被视为此任务的重复:- —-
How do i configure a task to call a PowerShell script in vscode

# Accepted answer below:

{
    "version": "0.1.0",
    "command": "powershell",
    "args": [   
        "-ExecutionPolicy",
        "Unrestricted",
        "-NoProfile",
        "-File",
        "${cwd}/source/deployment/build.ps1"       
    ],
    "taskSelector": "-task ",
    "showOutput": "always",
    "tasks": [
        {
            "taskName": "build",
            "showOutput": "always",
            "isBuildCommand": true
        }
    ]
}

See also this MSDN Channel 9 video on Task Runners.
恕我直言,如果您有一个.ps1,它已经完成了您想要的任务,那么为什么要从任务中调用它呢?当然,您可以,但是,您已经在VSC中,只需从VSCode PowerShell控制台终端运行脚本,只需键入其名称即可。
您也没有说明如何定义VSCode用户设置。
示例-在您的使用设置中,以下设置是什么:

"terminal.integrated.shell.windows":
"powershell.powerShellExePath":
"shellLauncher.shells.windows":

OP更新

看来你发布了两次这个问题,我回复了两次。
如何在VSC IDE(版本2.0.0)中配置任务以启动.ps1脚本?
当然,答案不是我的,而是我给你指的问答。
请参阅您的另一篇文章,我在其中指出了有关为要使用的终端配置用户环境的VSCode文档。

您的错误明确表示无法启动Shell行程序,同样,因为VSCode使用设定中有/没有的内容,导致无法找到所需的内容。

cfh9epnr

cfh9epnr4#

我的问题的解决方案很简单:停止正在运行的项目。
至于我的情况,这是我自己的错,只是我知道它。
事情是这样的:
我正在做Node.js编码。当我试图运行“debug”时,我得到了以下错误:

process exited with code 1

也就是说我永远无法调试。
我试了几种在网上找到的方法,但都不管用。
然后我发现我的“nodemon”自动启动功能正在运行。
所以我停止了正在运行的服务器,我尝试再次运行调试功能。这次它开始工作了。

相关问题