Unity 控制外部应用程序启动及关闭

1.启动外部应用程序(不带参数)

using UnityEngine;
using UnityEngine.UI;
using System.Diagnostics;
using System.Collections.Generic;
using TMPro;
using System;

public class Control : MonoBehaviour
{
    /// <summary>
    /// 不带参数直接启动外部程序
    /// </summary>
    /// <param name="name">应用程序的名称,如:"C:/Users/admin/Desktop/Test/XXX.exe"</param>
    void StartApp(string name)
    {
        Process.Start(name);
    }
    /// <summary>
    /// 关闭某程序(所有进程都会关闭,先打开的先关闭)
    /// </summary>
    /// <param name="name">应用程序名称(非路径),如:XXX.exe的XXX</param>
    void EndApp(string name)
    {
        Process[] processes = Process.GetProcesses();
        foreach (Process process in processes)
        {
            try
            {
                if (!process.HasExited && process.ProcessName == name)
                    process.Kill();
            }
            catch (InvalidOperationException ex)
            {
                UnityEngine.Debug.Log(ex);
            }
        }
    }
}

2.打开外部应用程序(带参数)

using UnityEngine;
using UnityEngine.UI;
using System.Diagnostics;
using System.Collections.Generic;
using TMPro;

public class Control : MonoBehaviour
{
    public Button add;
    public Button close;
    public TMP_InputField inputField;

    string filePath;
    string paramters;
    //在不能保证传入的参数不会有相同值的情况下,建议调换字典的key和value位置
    Dictionary<string, Process> process = new Dictionary<string, Process>();

    private void Start()
    {
        add.onClick.AddListener(OnClickAdd);
        close.onClick.AddListener(OnClickClose);
    }
    void OnClickAdd()
    {
        //程序地址
        filePath = "C:/Users/gcddd/Desktop/TsetProject/Recieve/Test.exe";
        //传入参数
        paramters = inputField.text;
        process.Add(paramters, Process.Start(filePath, paramters));
    }
    void OnClickClose()
    {
        foreach (KeyValuePair<string, Process> item in process)
        {
            if (item.Key == inputField.text)
            {
                if (!item.Value.HasExited)
                {
                    item.Value.Kill();
                    process.Remove(item.Key);
                    break;
                }
            }
        }
    }
}

3.带用户信息的启动外部应用

/// <summary>
    /// 带用户信息参数的启动一个外部应用程序
    /// </summary>
    /// <param name="name">应用程序的名称</param>
    /// <param name="userName">用户名</param>
    /// <param name="userPass">密码</param>
    /// <param name="region">域</param>
    private void ProjectOpen(string name,string userName,SecureString userPass,string region)
    {
        Process.Start(name, userName, userPass, region);
    }
 
    /// <summary>
    /// 带用户信息和一组命令行参数的启动一个外部应用程序
    /// </summary>
    /// <param name="name">应用程序的名称</param>
    /// <param name="paramters">一组命令行参数</param>
    /// <param name="userName">用户名</param>
    /// <param name="userPass">密码</param>
    /// <param name="region">域</param>
    private void ProjectOpen(string name,string paramters,string userName,SecureString userPass,string region)
    {
        Process.Start(name, paramters, userName, userPass, region);
    }

4.被打开的应用接收传入的信息

List<string> commandLineArgs = new List<string>(Environment.GetCommandLineArgs());

commandLineArgs[1];//commandLineArgs[0]是程序本身地址,commandLineArgs[1]是传入的命令行参数

/// <summary>
    /// 根据传给项目的参数,打开目标项目
    /// </summary>
    private void OpenProject()
    {
        string[] CommandLineArgs = Environment.GetCommandLineArgs();
        //只有路径名一个参数
        if (CommandLineArgs.Length <= 1) Application.Quit();
        //有除了项目名/项目路径外的其他参数
        else
        {
            if (CommandLineArgs.Length == 5 && CommandLineArgs[4] == "OpenProject")
            {
                OpenProject.ProjectOption projectOption = new OpenProject.ProjectOption();
                projectOption.projectID = CommandLineArgs[1];
                projectOption.projectName = CommandLineArgs[2];
                projectOption.projectVersion = CommandLineArgs[3];
                ProjectManagement.instance.OpneProject(projectOption);
            }
        }
    }

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值