91 lines
3.8 KiB
C#
91 lines
3.8 KiB
C#
using Newtonsoft.Json;
|
|
using System.Diagnostics;
|
|
using System;
|
|
using System.Text.RegularExpressions;
|
|
using Serilog;
|
|
using Serilog.Core;
|
|
|
|
namespace Runas
|
|
{
|
|
class Program
|
|
{
|
|
public static string DataText = RegexAllEnv(Runas.Properties.Resources.progs);
|
|
public static dynamic jprograms = JsonConvert.DeserializeObject(DataText);
|
|
public static string RegexAllEnv(string data)
|
|
{
|
|
System.Collections.Hashtable env = (System.Collections.Hashtable)Environment.GetEnvironmentVariables();
|
|
string val;
|
|
foreach (System.Collections.DictionaryEntry key in env)
|
|
{
|
|
val = (string)key.Value;
|
|
val = val.Replace(@"\", @"\\");
|
|
if (key.Key is not (object)"Path" and not (object)"path")
|
|
{
|
|
data = val.EndsWith(@"\") ? Regex.Replace(data, $"\\u0025{key.Key}\\u0025\\\\", val, RegexOptions.IgnoreCase) : Regex.Replace(data, $"\\u0025{key.Key}\\u0025", val, RegexOptions.IgnoreCase);
|
|
// val.EndsWith(@"\")? data.Replace($"%{key.Key}%\\", val) : data.Replace($"%{key.Key}%",val);
|
|
}
|
|
}
|
|
return data;
|
|
}
|
|
public static bool DoRun(string program)
|
|
{
|
|
Process[] process = Process.GetProcessesByName(program);
|
|
Log.Information($"{program}:{process.Length > 0}");
|
|
return (process.Length > 0);
|
|
}
|
|
public static void RunProcess(string programName)
|
|
{
|
|
|
|
if (!(DoRun(programName)))
|
|
{
|
|
if (programName.Equals("AutoHotKey"))
|
|
{
|
|
Log.Information($"\u0022{jprograms[programName][1].Value.ToString()}\u0022");
|
|
ProcessStartInfo proc = new();
|
|
proc.UseShellExecute= false;
|
|
proc.Arguments = $"\u0022{jprograms[programName][1].Value.ToString()}\u0022";
|
|
proc.FileName = jprograms[programName][0].Value;
|
|
proc.RedirectStandardError = true;
|
|
Log.Information(Process.Start(proc).StandardError.ReadToEnd());
|
|
//Process.Start(jprograms[programName][0].Value, $"\u0022{jprograms[programName][1].Value.ToString()}\u0022");
|
|
}
|
|
|
|
else if (jprograms[programName].Count > 1)
|
|
{
|
|
foreach (var prog in jprograms[programName])
|
|
{
|
|
if (System.IO.File.Exists(prog.Value))
|
|
{
|
|
Log.Information($"{prog.Value}");
|
|
Process.Start(prog.Value);
|
|
}
|
|
}
|
|
}
|
|
else if (jprograms[programName].Count == 1)
|
|
{
|
|
if (System.IO.File.Exists(jprograms[programName][0].Value))
|
|
{
|
|
Log.Information($"{jprograms[programName][0].Value}");
|
|
Process.Start(jprograms[programName][0].Value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
static void Main(string[] args)
|
|
{
|
|
Log.Logger = new LoggerConfiguration().WriteTo.File(
|
|
$"{Environment.CurrentDirectory}/Logs/{DateTime.Now:yyyy-MM-dd}.log",
|
|
Serilog.Events.LogEventLevel.Information,
|
|
"{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz}[{Level: u3}] {Message:lj}{NewLine}",
|
|
rollingInterval: RollingInterval.Hour)
|
|
.CreateLogger();
|
|
foreach (var prog in jprograms)
|
|
{
|
|
string ProgProg = ((Newtonsoft.Json.Linq.JProperty)prog).Name;
|
|
System.Threading.Thread thread = new(new System.Threading.ThreadStart(() => RunProcess(ProgProg)));
|
|
thread.Start();
|
|
}
|
|
}
|
|
}
|
|
}
|