버그 수정
This commit is contained in:
90
Packages/com.mibdev.fullscreen-editor/Editor/Cmd.cs
Normal file
90
Packages/com.mibdev.fullscreen-editor/Editor/Cmd.cs
Normal file
@@ -0,0 +1,90 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
|
||||
namespace FullscreenEditor {
|
||||
public static class Cmd {
|
||||
|
||||
public static string Run(string command, params object[] formatArgs) {
|
||||
return Run(command, false, formatArgs);
|
||||
}
|
||||
|
||||
public static string Run(string command, bool asAdmin, params object[] formatArgs) {
|
||||
command = string.Format(command, formatArgs);
|
||||
|
||||
var stdout = string.Empty;
|
||||
var stderr = string.Empty;
|
||||
var exitCode = Run(command, asAdmin, out stdout, out stderr);
|
||||
|
||||
if (exitCode == 0)
|
||||
return stdout.Trim();
|
||||
|
||||
throw new Exception(string.Format("Command {0} exited with code {1}", command, exitCode));
|
||||
}
|
||||
|
||||
public static int Run(string command, bool asAdmin, out string stdout, out string stderr) {
|
||||
var proc = new Process();
|
||||
var stdoutBuilder = new StringBuilder();
|
||||
var stderrBuilder = new StringBuilder();
|
||||
|
||||
proc.EnableRaisingEvents = true;
|
||||
|
||||
if (Application.platform == RuntimePlatform.WindowsEditor)
|
||||
proc.StartInfo = new ProcessStartInfo() {
|
||||
FileName = "cmd.exe",
|
||||
Arguments = "/C \"" + command + "\"",
|
||||
UseShellExecute = asAdmin,
|
||||
RedirectStandardError = !asAdmin,
|
||||
RedirectStandardOutput = !asAdmin,
|
||||
Verb = asAdmin? "runas": "",
|
||||
CreateNoWindow = !asAdmin,
|
||||
WorkingDirectory = Environment.CurrentDirectory
|
||||
};
|
||||
else
|
||||
proc.StartInfo = new ProcessStartInfo() {
|
||||
FileName = "/bin/bash",
|
||||
Arguments = "-c \"" + command + "\"",
|
||||
UseShellExecute = asAdmin,
|
||||
RedirectStandardError = !asAdmin,
|
||||
RedirectStandardOutput = !asAdmin,
|
||||
CreateNoWindow = !asAdmin,
|
||||
WorkingDirectory = Environment.CurrentDirectory
|
||||
};
|
||||
|
||||
if (!asAdmin) {
|
||||
proc.OutputDataReceived += (sender, args) => {
|
||||
if (!string.IsNullOrEmpty(args.Data))
|
||||
stdoutBuilder.AppendLine(args.Data);
|
||||
};
|
||||
|
||||
proc.ErrorDataReceived += (sender, args) => {
|
||||
if (!string.IsNullOrEmpty(args.Data))
|
||||
stderrBuilder.AppendLine(args.Data);
|
||||
};
|
||||
}
|
||||
|
||||
//proc.Exited += (sender, args) => {
|
||||
// Debug.LogWarningFormat("Command {0} exited with code {1}", command, proc.ExitCode);
|
||||
//};
|
||||
|
||||
if (proc.Start()) {
|
||||
if (!asAdmin) {
|
||||
proc.BeginOutputReadLine();
|
||||
proc.BeginErrorReadLine();
|
||||
}
|
||||
proc.WaitForExit();
|
||||
|
||||
stdout = stdoutBuilder.ToString();
|
||||
stderr = stderrBuilder.ToString();
|
||||
|
||||
Logger.Debug("{3}: {0}\nstdout: {1}\nstderr: {2}", command, stdout, stderr, proc.ExitCode);
|
||||
|
||||
return proc.ExitCode;
|
||||
}
|
||||
|
||||
throw new Exception(string.Format("Failed to start process for {0}", command));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user