使用Unity打开外部程序

在Unity中打开外部程序

  • 如下
    • 导入命名空间
    • 获取路径
    • 打开程序
    • 打开和Unity一起发布的外部程序
    • 关闭程序
      • 更新:2021-5-23

如下

2021-4-09-20:20

导入命名空间

首先导入命名空间:

namespace System.Diagnostics

导入这个命名空间之后如果使用Debug.Log(“”);可能会提示冲突,如果你想打印日志则可以:

using Debug = UnityEngine.Debug;

获取路径

路径有相对路径和绝对路径两种。
相对路径:相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。
绝对路径:是一个文件的完整路径,包含盘符,当使用绝对路径的时候,文件夹位置改变了,而这里的代码没有及时更新就会报错。

打开程序

这里使用的是绝对路径,需要打开的程序需要和Unity一起发布那么请使用后面的方法

    private void OnGUI()
    {
        if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height / 2 - 31, 100, 62), "开启程序"))//按钮的X坐标,按钮的Y坐标,宽度,高度
        {
            string PrograssPath = "D:/Steam/Steam.exe";//双引号内填写程序的绝对路径,注意斜线的方向
            Process.Start(PrograssPath);
        }
 	}

打开和Unity一起发布的外部程序

首先在Assets下创建一个名为"StreamingAssets"的文件夹,这里字母不可以出错,然后将程序放到"StreamingAssets"文件夹内,然后使用代码来打开文件夹中的程序.

   private void OnGUI()
    {
        if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height / 2 - 31, 100, 62), "开启程序"))//按钮的X坐标,按钮的Y坐标,宽度,高度
        {

             string  PrograssPath = Application.streamingAssetsPath + "/"+"Steam.exe";//这里是使用的路径是从"StreamingAssets"开始的路径,双引号内填写路径。
            Process.Start(PrograssPath);
        }
   	}

当有外部程序在"StreamingAssets"文件夹中的时候发布会报错,需要将外部程序的文件夹剪切出去,然后发布unity程序,再把外部程序放到发布文件的"StreamingAssets"的文件夹中,注意路径不要出错。

关闭程序

关闭程序只需要知道程序的名称,然后就可以关闭程序

        /// 
        /// 关闭程序
        /// 
        /// 需要关闭的程序名,不需要后缀
        private void KillProcess(string processName)
        {
            System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcesses();
            foreach (System.Diagnostics.Process process in processes)
            {
                try
                {
                    if (!process.HasExited)
                    {
                        if (process.ProcessName == processName)
                        {
                            process.Kill();
                            UnityEngine.Debug.Log("已关闭进程");
                        }
                    }
                }
                catch (System.InvalidOperationException ex)
                {
                    UnityEngine.Debug.Log(ex);
                }
            }
        }

然后就可以调用方法来关闭程序

      if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height / 2 + 31, 100, 62), "关闭程序"))
        {
            KillProcess("Steam");//需要关闭的程序名称,可以在任务管理器中查看
        }

更新:2021-5-23

问题:当Unity发布之后将外部程序文件加入到“StreamingAssets”之后,运行Unity程序,但是外部程序提示找不到某个DILL。
解决方案:1.先将外部程序放到桌面,测试程序是否正常,
2.若正常将程序放到“StreamingAssets”启动发布的unity项目,若外部程序报错,检查是不是外部程序的报错的DILL是否在拷贝的时候丢了,若没有丢失可能是程序找不到DILL,说明程序的路径太长了找不到,win系统下路径最长大约是256字符。

你可能感兴趣的:(Unity,unity)