/// <summary> /// Enables this application to be called from a SymLink without assembly load failures. /// </summary> public static void EnableAssemblyLoadFix() { string exeName = ProcessHelper.GetOwnExeName(); string exeNamePath = Path.GetDirectoryName(exeName); RealRoot = Path.GetDirectoryName(ResolveSymbolicLink(exeName)); if (!string.IsNullOrEmpty(RealRoot) && RealRoot != exeNamePath) { AppDomain.CurrentDomain.SetData("APPBASE", RealRoot); // I don't know if this line has any effect at all. Feel free to delete it if you have good reason. AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; } }
/// <summary> /// Naive Shim Detection. /// </summary> /// <param name="parent"></param> /// <returns></returns> public static bool IsShim(Process parent) { try { var fileName = parent.MainModule.FileName; if (fileName.NotIn(ProcessHelper.GetOwnExeName()) && fileName.In("sudo.exe", "gsudo.exe")) { return(true); } } catch { } // fails to get parent.MainModule if our parent process is elevated and we are not. return(false); }
/// <summary> /// Naive Shim Detection. /// </summary> /// <param name="parent"></param> /// <returns></returns> public static bool IsShimOrWrapper(Process parent) { try { var fileName = parent.MainModule.FileName.ToUpperInvariant(); if (!fileName.Equals(ProcessHelper.GetOwnExeName(), StringComparison.OrdinalIgnoreCase) && ( fileName.EndsWith("\\SUDO.EXE", StringComparison.Ordinal) || fileName.EndsWith("\\GSUDO.EXE", StringComparison.Ordinal) || fileName.EndsWith("\\BASH.EXE", StringComparison.Ordinal) // MINGW64/MSYS wrapper ) ) { return(true); } } catch { } // fails to get parent.MainModule if our parent process is elevated and we are not. return(false); }