Терминальный процесс завершен с кодом выхода: 1 - PullRequest
0 голосов
/ 05 мая 2019

Я хочу использовать IDE-код Visual Studio ("VSC") для разработки на MQL (а не в собственной среде MetaEditor), как описано здесь: Как кодировать и компилировать MQL5 в Visual Studio .

Мой вопрос относится к процессу компиляции, который состоит из VSC-задачи, которая вызывает скрипт PowerShell, который вызывает MetaEditor.exe для выполнения фактической компиляции.

Все работает нормально, когда я запускаюСценарий PowerShell напрямую (выбрав его код и нажав F8 ), но когда я пытаюсь запустить его через назначенную VSC-задачу, я получаю ошибку

Процесс терминала завершается скод выхода: 1

(до того, как я выбрал PowerShell в качестве оболочки по умолчанию, как описано в связанном описании).

Это скрипт 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"
}

, и это VSC-задача в формате .json, которая должна вызывать предыдущуюСкрипт 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) необходимо загрузить (бесплатно) .

Ответы [ 2 ]

0 голосов
/ 22 июня 2019

У меня была эта проблема, потому что я случайно удалил tsconfig.json

0 голосов
/ 06 мая 2019

Причина, по которой это работает с F8, заключается в том, что вы уже находитесь в сеансе PowerShell и, следовательно, будете работать в исходном режиме. Используя вашу задачу, вы пытаетесь запустить .ps1, не запуская PowerShell.

Запуск задачи - это запуск задачи, особенности (переключатели, аргументы и т. Д.) Другой вещи, которую вы выполняете совместно, могут иметь свои собственные потребности. Тем не менее, ваш запрос потенциально может рассматриваться как дубликат этого: ---

Как настроить задачу для вызова скрипта PowerShell в 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
        }
    ]
}

См. Также это видео на канале MSDN 9, посвященное исполнителям задач.

ИМХО, если у вас есть .ps1, который уже делает то, что вы хотите, то зачем вызывать его из задачи? Конечно, вы можете, но вы уже в VSC, просто запустите свои скрипты из консольного терминала VSCode PowerShell, просто набрав его имя.

Вы также не говорите, как у вас определены пользовательские настройки VSCode.

Пример - что ниже указано в настройках вашего использования:

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

Обновление для OP

Похоже, вы отправили этот запрос дважды, а я ответил дважды.

Как настроить задачу для запуска .ps1-скрипта в VSC IDE (версия 2.0.0)

Конечно, решение не мое, но из вопросов и ответов, на которые я вам указал.

См. Ваш другой пост, где я указал вам на документы VSCode о настройке вашей пользовательской среды для того, какие терминалы будут использоваться.

Ваша ошибка, в частности, означает, что процесс оболочки не может быть запущен , опять же, потому что он не может найти то, что ему нужно, из-за того, что находится в / нет в настройках использования VSCode .

...