using System;
using System.Collections.Generic;
using System.Linq;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading;
namespace Update
{
static class Program
{
static string EscapeArgument (string arg)
{
if (arg.Length == 0) return "\"\"";
bool needQuotes = arg.Any (char.IsWhiteSpace) || arg.Contains ('"');
if (!needQuotes) return arg;
var sb = new StringBuilder ();
sb.Append ('"');
int backslashes = 0;
foreach (char c in arg)
{
if (c == '\\')
{
backslashes++;
}
else if (c == '"')
{
sb.Append ('\\', backslashes * 2 + 1);
sb.Append ('"');
backslashes = 0;
}
else
{
sb.Append ('\\', backslashes);
sb.Append (c);
backslashes = 0;
}
}
sb.Append ('\\', backslashes * 2);
sb.Append ('"');
return sb.ToString ();
}
///
/// 应用程序的主入口点。
///
[STAThread]
static void Main (string [] args)
{
bool createdNew = false;
Mutex mutex = new Mutex (true, "WindowsModern.PracticalToolsProject!Settings.Update", out createdNew);
if (!createdNew)
{
return;
}
try
{
Process p = new Process ();
p.StartInfo.FileName = Path.Combine (AppDomain.CurrentDomain.BaseDirectory, "settings.exe");
List arguments = new List ();
arguments.Add ("appinstaller");
arguments.Add ("update");
arguments.AddRange (args);
StringBuilder argBuilder = new StringBuilder ();
foreach (string a in arguments)
{
if (argBuilder.Length > 0)
argBuilder.Append (" ");
argBuilder.Append (EscapeArgument (a));
}
p.StartInfo.Arguments = argBuilder.ToString ();
p.Start ();
p.WaitForExit ();
int exitCode = p.ExitCode;
}
finally
{
mutex.ReleaseMutex ();
}
}
}
}