using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text.RegularExpressions;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Launcher
|
|
{
|
|
static class Program
|
|
{
|
|
private static string[] TABOO_NAMES = {
|
|
//"Start",
|
|
//"Update",
|
|
//"Awake",
|
|
//"OnDestroy"
|
|
};
|
|
private static string[] ENTRY_TYPES = { "Display" };
|
|
|
|
/// <summary>
|
|
/// The main entry point for the application.
|
|
/// </summary>
|
|
[STAThread]
|
|
static void Main()
|
|
{
|
|
try {
|
|
var execPath = Application.ExecutablePath;
|
|
var fileName = Path.GetFileNameWithoutExtension(execPath);
|
|
if (fileName.IndexOf("VR") == -1 && fileName.IndexOf("_") == -1)
|
|
{
|
|
Fail("File not named correctly!");
|
|
}
|
|
|
|
bool vrMode = fileName.IndexOf("VR") > 0;
|
|
string baseName = execPath.Substring(0, vrMode
|
|
? execPath.LastIndexOf("VR")
|
|
: execPath.LastIndexOf("_"));
|
|
|
|
string executable = baseName + ".exe";
|
|
var file = new FileInfo(executable);
|
|
if (file.Exists)
|
|
{
|
|
var args = Environment.GetCommandLineArgs().ToList();
|
|
if (vrMode) args.Add("--vr");
|
|
EnsureIPA(executable);
|
|
StartGame(executable, args.ToArray());
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Could not find: " + file.FullName, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
} catch(Exception globalException) {
|
|
MessageBox.Show(globalException.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
|
|
}
|
|
|
|
private static void EnsureIPA(string executable)
|
|
{
|
|
var processStart = new ProcessStartInfo("IPA.exe", EncodeParameterArgument(executable) + " --nowait");
|
|
processStart.UseShellExecute = false;
|
|
processStart.CreateNoWindow = true;
|
|
processStart.RedirectStandardError = true;
|
|
|
|
var process = Process.Start(processStart);
|
|
process.WaitForExit();
|
|
if(process.ExitCode != 0)
|
|
{
|
|
Fail(process.StandardError.ReadToEnd());
|
|
}
|
|
}
|
|
|
|
private static void StartGame(string executable, string[] args)
|
|
{
|
|
var arguments = string.Join(" ", args.ToArray());
|
|
Process.Start(executable, arguments);
|
|
}
|
|
|
|
private static void Fail(string reason) {
|
|
throw new Exception(reason);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Encodes an argument for passing into a program
|
|
/// </summary>
|
|
/// <param name="original">The value that should be received by the program</param>
|
|
/// <returns>The value which needs to be passed to the program for the original value
|
|
/// to come through</returns>
|
|
private static string EncodeParameterArgument(string original)
|
|
{
|
|
if (string.IsNullOrEmpty(original))
|
|
return original;
|
|
string value = Regex.Replace(original, @"(\\*)" + "\"", @"$1\$0");
|
|
value = Regex.Replace(value, @"^(.*\s.*?)(\\*)$", "\"$1$2$2\"");
|
|
return value;
|
|
}
|
|
|
|
}
|
|
}
|