【问题标题】:Opening and closing background process using Unity and ProcessStartInfo使用 Unity 和 ProcessStartInfo 打开和关闭后台进程
【发布时间】:2021-02-13 03:09:46
【问题描述】:

我一直在尝试为我的统一 VR 游戏编写一个快速脚本,以便在运行时从 Azure Kinect 相机开始录制,并在应用程序关闭时关闭此脚本/录制。要运行他们的演示录制应用程序,您可以在命令提示符下运行k4arecorder.exe output.mkv,然后按Ctrl-C 关闭摄像头,这样程序就可以正确保存文件(参见Azure Kinect SDK)。

我已经能够成功打开脚本并使用以下代码从相机开始录制,但我无法在弹出命令提示符中输入Ctrl-C(或任何文本)以停止相机从运行。而且我不能使用Process.StandardInput.Close(),因为我正在使用useShellExecute=True 运行它

.exe 在Ctrl-C 输入后保存摄像头记录,所以我确实需要在完全停止程序之前以某种方式关闭标准输入。

    ProcessStartInfo startInfo;
    Process process;

    void Start()
    {
        startInfo = new ProcessStartInfo();
        startInfo.FileName = @"C:\Program Files\Azure Kinect SDK v1.4.1\tools\k4arecorder.exe";
        startInfo.Arguments = System.IO.Directory.GetCurrentDirectory() + "\\output_testing.mkv";

        process = new Process {StartInfo = startInfo};
        process.Start();
    }

我也尝试了另一种方法,重定向 StandardInput,但是在弹出命令提示符下我根本看不到任何文本,并且我尝试关闭 stdin 并将任何内容打印到命令提示符也没有奏效.例如,我从未在命令提示符中看到任何运行:

ProcessStartInfo startInfo;
    Process process;
    void Start()
    {
        startInfo = new ProcessStartInfo();
        startInfo.FileName = @"C:\Program Files\Azure Kinect SDK v1.4.1\tools\k4arecorder.exe";
        startInfo.Arguments = System.IO.Directory.GetCurrentDirectory() + "\\output_testing.mkv";
        startInfo.UseShellExecute = false;
        startInfo.RedirectStandardOutput = true;
        startInfo.RedirectStandardError = true;
        startInfo.RedirectStandardInput = true;
        startInfo.CreateNoWindow = false;

        process = new Process {StartInfo = startInfo};
        process.Start();

        process.StandardInput.WriteLine("testing");
        string output = process.StandardOutput.ReadToEnd();
        UnityEngine.Debug.Log(output);
    }

    void OnApplicationQuit()
    {
        // this will just perpetually wait until I close the window cause cntrl-c not going thru
        process.StandardInput.Close();
        process.WaitForExit();
        process.Close();
    }

非常感谢任何提示!我觉得这两种方法都必须有办法解决,但我做不到。这是 Unity 2019.4.1f1 和 Azure Kinect SDK v1.4.1(虽然我不认为这是一个错误)。

【问题讨论】:

  • 如果你想这样做:process.StandardOutput.ReadToEnd(),那么你需要这样做:RedirectStandardOutput = true
  • 公平,谢谢您的回复。我已经编辑了该代码块以反映RedirectStandardOutput = true,但命令提示符上仍然没有显示任何内容,我的统一控制台中也没有任何“测试”打印。

标签: c# unity3d process command-prompt azurekinect


【解决方案1】:

您好,对我有用的一件事是使用:

void OnApplicationQuit() { process.CloseMainWindow(); }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2021-02-25
    • 2023-04-04
    • 2018-10-05
    相关资源
    最近更新 更多