无法在 Unity 中启动外部进程

Posted

技术标签:

【中文标题】无法在 Unity 中启动外部进程【英文标题】:Can't start an extern process in Unity 【发布时间】:2017-08-23 10:40:42 【问题描述】:

我正在统一使用 Process 类来启动一个进程。

Process myProcess = new Process();
        myProcess.StartInfo.FileName = path;
        myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
        myProcess.StartInfo.Arguments = JsonConvert.SerializeObject(params);
        myProcess.Start();

我正在为 OSx 使用统一。我通过创建一个发送相同字符串参数并使用相同路径的新控制台应用程序对其进行了测试,它实际上工作正常。当我尝试从统一启动进程时,即使进程调用下面的代码有效,它也不起作用并且不会发送任何错误,所以我认为它成功但没有任何反应。我不明白为什么。 顺便说一句,我在一个统一按钮事件中启动流程调用。

【问题讨论】:

你有没有在控制台和unity中查看过JsonConvert.SerializeObject(params);的值?也许价值观不同? 两者都是同一个 json 对象,我什至尝试在两者中都不发送参数并且应用程序运行(在测试控制台应用程序中)并发送错误,因为我没有传递数据,但统一控制台未启动。 你有没有尝试过here和here的一些建议? 是的,我尝试了所有这些,但没有任何反应,应用程序没有运行。 【参考方案1】:

我用这个方法在Unity中调用外部进程。

public static void ExecProcess(string name, string args)

    Process p = new Process();
    p.StartInfo.FileName = name;
    p.StartInfo.Arguments = args;
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.CreateNoWindow = true;
    p.StartInfo.UseShellExecute = false;
    p.Start();

    string log = p.StandardOutput.ReadToEnd();
    string errorLog = p.StandardError.ReadToEnd();

    p.WaitForExit();
    p.Close();

对于异步版本,您需要进行轻微修改。

【讨论】:

A 试过了,但我收到了这个错误Win32Exception: ApplicationName='/Applications/Bamboo Wall Binary/WeightsResults.exe', CommandLine='', CurrentDirectory='' System.Diagnostics.Process.Start_noshell (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process) System.Diagnostics.Process.Start_common (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process) System.Diagnostics.Process.Start () (wrapper remoting-invoke-with-check) System.Diagnostics.Process:Start ()抱歉粘贴了整个错误 @MisaelGaray 为什么会有 WeightsResults.exe?您正在使用 OSX。它不运行 exe 文件。

以上是关于无法在 Unity 中启动外部进程的主要内容,如果未能解决你的问题,请参考以下文章

Unity启动外部程序(Process)

System.Diagnostics.Process.Start() 从 Windows 服务调用时无法启动进程

unity游戏启动如何调出

python 怎么启动一个外部命令程序,并且不阻塞当前进程

System.Diagnostics.Process 启动进程资源或调用外部的命令的使用

用 Python 结束外部程序