Unity中通過Process啟動程式並傳遞資料
阿新 • • 發佈:2021-01-07
說明:
最近根據專案上的需求,一個專題中有眾多的場景,後決定採用【主場景+子場景】分開打包的方式,需要解決的是在主場景登陸進去之後需要將【使用者ID】等資料傳遞到子場景中,一開始採用的是Socket通訊的方式傳遞,後來改為使用程序(Process)啟動外部exe。
所引用的名稱空間為:System.Diagnostics
1. 不帶引數直接啟動外部程式
Process.Start("啟動的路徑名字");
2. 啟動時傳遞引數
傳遞多個引數時需要用【空格】分開
/// <param name="path">啟動路徑</param>
/// <param name="argument">傳遞的引數 【多個引數使用空格分開】</param>
public static void OpenStartByProgress(string path,string argument)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = path;
startInfo.Arguments = argument;
Process. Start(startInfo);
}
3.啟動傳遞引數,避免多開(只開一個)
注意: 獲取程序中的名字進行比較時沒有後綴,比如QQ.exe, 程序名字是QQ
/// <param name="path">啟動路徑</param>
/// <param name="argument">傳遞引數</param>
public static void OpenByProgress(string path,string argument,UnityAction<string> action= null)
{
//這裡是根據路徑獲取啟動的程式名字
int index = path.LastIndexOf('/');
//啟動程序的名字(程序的名字字尾沒有.exe)
string ProgressName =path.Substring(index+1).Split('.')[0];
//索引記數
int currentProgress = 0;
Process[] processes = Process.GetProcesses();
foreach (var item in processes)
{
if (item.ProcessName == ProgressName)
{
currentProgress++;
}
}
if (currentProgress >= 1) //已經啟動的情況下
{
//提示資訊: 當前程序已經啟動 請勿重複使用
action("當前程式已經啟動,請勿重複啟動");
}
else //沒有啟動
{
//程序啟動
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = path;
startInfo.Arguments = argument;
Process.Start(startInfo);
}
}
4.子場景啟動時獲取傳遞的引數
private void GetArguements()
{
//args陣列獲取的就是引數列表,可根據實際情況進行處理
string[] args = Environment.GetCommandLineArgs();
//args[0]: 的資料為啟動的路徑
ProgressData.Id = args[1];
ProgressData.MemberId = args[2];
ProgressData.Token = args[3];
}
如有錯誤請指出,相互學習,相互進步!