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);
}
}
}