private int NgenRun(AssemblyDetails assembly, NgenAction action) { _outputMessages.Clear(); var arguments = string.Empty; switch (action) { case NgenAction.Install: arguments = "install"; break; case NgenAction.Uninstall: arguments = "uninstall"; break; case NgenAction.Update: arguments = "update"; break; case NgenAction.Display: arguments = "display"; break; } if (action == NgenAction.Install || action == NgenAction.Uninstall || action == NgenAction.Display) { arguments += " \"" + assembly.AssemblyFile + "\" /nologo"; } else { arguments += " /nologo"; } //string frameworkPath; string frameworkDictKey = assembly.FrameworkVersion + (assembly.CPUVersion == CPUVersion.x64 ? "_64" : "_32"); string frameworkPath; lock (locker) { if (!FrameworkDict.TryGetValue(frameworkDictKey, out frameworkPath)) { frameworkPath = GetFrameworkDirectory(assembly.CPUVersion == CPUVersion.x64); FrameworkDict.Add(frameworkDictKey, frameworkPath); } } var nGenPath = frameworkPath + assembly.FrameworkVersion + "\\Ngen.exe"; if (!File.Exists(nGenPath)) { throw new FileNotFoundException(".NET Framework " + assembly.FrameworkVersion + (assembly.CPUVersion == CPUVersion.x64 ? " (x64)" : string.Empty) + " seems to be missing."); } return(RunWithRedirect(nGenPath, arguments)); }
static Process Ngen(NgenAction action, Process process, bool withWindow = false) { var module = process.MainModule; Debug.WriteLine(ngenpath + $" {action.ToString().ToLowerInvariant()} \"{module.FileName}\" /nologo"); var startInfo = new ProcessStartInfo() { CreateNoWindow = !withWindow, Verb = "runas", FileName = ngenpath, Arguments = $"{action.ToString().ToLowerInvariant()} \"{module.FileName}\" /nologo", WindowStyle = withWindow ? ProcessWindowStyle.Normal : ProcessWindowStyle.Hidden, }; return(Process.Start(startInfo)); }