首页 > 其他分享 >unity下执行命令行

unity下执行命令行

时间:2022-11-20 13:47:14浏览次数:73  
标签:执行命令 cmdQueue System 博客 unity static ShowJavaVersion using

代码

#if UNITY_EDITOR

using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEditor;
using UnityEngine;

public class CmdTool
{
    private static Queue<string> _cmdQueue = new Queue<string>();

    [MenuItem("MyTools/ShowJavaVersion", false)]
    static void ShowJavaVersion()
    {
        _cmdQueue.Enqueue("java -version");
        CheckAndRunCmd();
    }

    private static void CheckAndRunCmd()
    {
        if (_cmdQueue.Count <= 0)
        {
            Debug.Log("finish");
            return;
        }

        using (var process = new System.Diagnostics.Process())
        {
            process.StartInfo.FileName = "cmd.exe";
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.RedirectStandardInput = true;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.RedirectStandardError = true;
            process.StartInfo.WorkingDirectory = @"C:\"; //不设置就是当前目录
            process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
            process.StartInfo.CreateNoWindow = true; //不显示命令行的黑窗口
            process.Start(); //启动程序

            var cmd = _cmdQueue.Dequeue();
            //process.StandardInput.AutoFlush = true; //下面手动Flush了, 所以这边可以注释掉
            process.StandardInput.WriteLine(cmd); //执行命令
            process.StandardInput.WriteLine("exit"); //执行完后自动退出cmd
            process.StandardInput.Flush(); //或 process.StandardInput.Close(); 

            process.WaitForExit(); //等待程序执行完退出进程
            if (process.HasExited)
            {
                PrintAllLines(process.StandardOutput);
                PrintAllLines(process.StandardError);

                CheckAndRunCmd();
            }
        }
    }

    private static void PrintAllLines(StreamReader sr)
    {
        var gbkEnc = Encoding.GetEncoding("gb2312"); //windows的命令行默认是gbk字符集的
        using (StreamReader sr2 = new StreamReader(sr.BaseStream, gbkEnc)) //换成gbk的Reader来读
        {
            while (!sr2.EndOfStream)
            {
                string curLine = sr2.ReadLine();
                if (!string.IsNullOrEmpty(curLine))
                {
                    Debug.Log($"{curLine}");
                }
            }
        }
    }

}

#endif

执行ShowJavaVersion的运行结果:

 

参考

C#:为什么我的Process运行Java.exe工作正常,但窗口没有返回任何输出? - VoidCC

用户对问题“如何在C#中逐行读取命令输出结果”的回答 - 问答 - 腾讯云开发者社区-腾讯云 (tencent.com)

c#process的详细用法_新创美的博客-CSDN博客

C#/.NET 中启动进程时所使用的 UseShellExecute 设置为 true 和 false 分别代表什么意思?_walter lv的博客-CSDN博客_useshellexecute

ImageMagick 的安装及使用 - Rogn - 博客园 (cnblogs.com) 

 

标签:执行命令,cmdQueue,System,博客,unity,static,ShowJavaVersion,using
From: https://www.cnblogs.com/sailJs/p/16895662.html

相关文章

  • Jenkins 使用Publish over SSH远程执行命令无法停止
    Jenkins使用PublishoverSSH,远程执行命令时,如果执行的命令中有nohupjava-jartest.jar类似的命令,可能会导致一直在打印日志。Jenkins无法停止,直到超时。解决方案:......
  • unity editor文件夹和程序集
    https://stackoverflow.com/questions/64461565/why-unity-includes-the-editor-directories-in-build 1.Unity自动识别Editor文件夹,在building的时候进行忽略.2.如果......
  • 3Dmax模型导入unity3d
    1、下载安装插件3Dmax场景助手(如果场景中存在vray材质的模型)​​http://www.kxdw.com/soft/28386.html​​2、3dmax导出fbx格式的模型3、导入unity3d导入或拷贝在Assets文......
  • Unity检测鼠标是否与UI交互
    在Unity项目中,假设在鼠标按键时会触发游戏内的操作,但是在鼠标与UI进行交互时我们希望停止游戏中的操作,这是需要使用EventSystem中的方法来检测鼠标是否正在与UI交互privat......
  • Unity中的网络
    网络连接硬件客户端和服务端通过集线器连接着路由器,路由器连接到互联网服务提供商。网络协议TCP参考链接:​​https://www.cnblogs.com/AhuntSun-blog/p/12028636.html​​三......
  • Unity网格内存优化
    在渲染场景时,为了降低三角形渲染面片数,往往会使用LOD来实现不同距离下使用不同细节的Mesh来渲染物体,但是这样会造成多份Mesh在内存中同时存在,最终导致Mesh内存占用偏高的问......
  • unity 通过场景名称实现动态加载背景BGM音乐
    在场景中创建一个空物体对象,然后将代码挂载到空物体需要注意的是,场景中需要有以下组件一般在主摄像头里 添加到代码挂载的空物体上将场景中类的公开变量s......
  • Unity ContentSizeFitter组件
    ContentSizeFitter组件,它可以动态改变物体的宽高,但它有一个非常需要注意的点就是,它不是即时刷新,是帧末刷新,这个特性如果没注意会出现一个问题就是你拿到加了这个组件的......
  • Unity开发笔记-Timeline扩展笔记(1)
    ILayerable代码修改动画后推publicstaticvoidSetTimeClipExtrapolation(TimelineClipclip,TimelineClip.ClipExtrapolationextrapolation){vartype=clip.Get......
  • 【Unity项目实践】FPS项目复盘及关键技术要点
    概述之前做过一个小型的FPS项目,基本实现了以下这些功能点:人物移动:前进后退、鼠标调整视角、右键瞄准;模拟后坐力、初步处理武器穿模的问题。怪物生成:在地图上放置怪物生成点,......