Files
runas/Runas/Program.cs
2023-05-10 13:38:05 +03:00

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();
}
}
}
}