Beispiel #1
0
        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));
        }
Beispiel #2
0
        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));
        }