FAKE - Запустить процесс в новом окне - PullRequest
1 голос
/ 12 апреля 2019

Я пытаюсь запустить приложение в новом окне консоли из сценария FAKE.

В обычном .NET-коде для этого можно использовать метод System.Diagnostics.Process.Start.

Я также делал это в прошлом с CAKE, как это:

Task("run-myapp")
  .Does(() => {
    var info = new ProcessStartInfo {
      FileName = "dotnet",
      Arguments = "run myapp.fsproj",
      WorkingDirectory = "C:\\path\\to\\my\\app\\"
    };
    Process.Start(info);
  });

В FAKE я пробовал то же самое, но это запускает новый фоновый процесс и выводит в окно консоли, где я запускаю FAKE. Затем мне понадобится диспетчер задач, чтобы убить этот процесс.

Target.create "run-myapp" (fun _ ->
  let psi = ProcessStartInfo()
  psi.FileName <- "dotnet"
  psi.Arguments <- "run myapp.fsproj"
  psi.WorkingDirectory <- "C:\\path\\to\\my\\app\\"
  Process.Start psi |> ignore
)

Я также попытался явно установить ProcessStartInfo.CreateNoWindow <- false (хотя false по умолчанию), и это ничего не меняет.

Есть ли способ сделать это в ФАКЕ?

1 Ответ

1 голос
/ 12 апреля 2019

Я нашел ответ в этой закрытой проблеме GitHub: https://github.com/dotnet/corefx/issues/21767#issuecomment-312328630

Причина заключается в том, что значение по умолчанию UseShellExecute равно false в .NET Framework, но true в.NET Core.CAKE в платформе, а FAKE 5 в ядре.

Решение:

Target.create "run-myapp" (fun _ ->
  let psi = ProcessStartInfo()
  psi.FileName <- "dotnet"
  psi.Arguments <- "run myapp.fsproj"
  psi.WorkingDirectory <- "C:\\path\\to\\my\\app\\"
  psi.UseShellExecute <- true
  Process.Start psi |> ignore
)
...