Esempio n. 1
0
        /// <summary>
        /// Populates all fields in this class. Must be called before any PInteractor is initialized or any class
        /// derived of PInteractor is initialized.
        /// </summary>
        public static void Init()
        {
            WinApi.SYSTEM_INFO si = new WinApi.SYSTEM_INFO();
            bool isThisWow64;
            WinApi.IsWow64Process(Process.GetCurrentProcess().Handle, out isThisWow64);
            if (isThisWow64)
            {
                WinApi.GetSystemInfo(out si);
            }
            else
            {
                WinApi.GetNativeSystemInfo(out si);
            }

            SysInteractor.MaxAddress = si.maximumApplicationAddress;
            SysInteractor.NumProcs = si.numberOfProcessors;
            SysInteractor.PageSize = si.pageSize;
            SysInteractor.Is64Bit = si.processorArchitecture == 6 || si.processorArchitecture == 9;

            SysInteractor.IsInitialized = true;
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            WinApi.SYSTEM_INFO inf = new WinApi.SYSTEM_INFO();
            WinApi.GetSystemInfo(ref inf);
            bool          is_x64         = inf.uProcessorInfo.wProcessorArchitecture == (ushort)9;
            List <string> winfx_x86_dirs = new List <string>(Directory.GetDirectories(
                                                                 Environment.GetEnvironmentVariable("windir") + "\\Microsoft.NET\\Framework\\", "v*"));
            int tmp;

            for (int i = winfx_x86_dirs.Count - 1; i >= 0; i--)
            {
                if (!int.TryParse(Path.GetFileName(winfx_x86_dirs[i]).Substring(1, 1), out tmp))
                {
                    winfx_x86_dirs.RemoveAt(i);
                }
            }
            winfx_x86_dirs.Sort();
            List <string> winfx_x64_dirs = null;

            if (is_x64)
            {
                winfx_x64_dirs = new List <string>(Directory.GetDirectories(
                                                       Environment.GetEnvironmentVariable("windir") + "\\Microsoft.NET\\Framework64\\", "v*"));
                for (int i = winfx_x64_dirs.Count - 1; i >= 0; i--)
                {
                    if (!int.TryParse(Path.GetFileName(winfx_x64_dirs[i]).Substring(1, 1), out tmp))
                    {
                        winfx_x64_dirs.RemoveAt(i);
                    }
                }
                winfx_x64_dirs.Sort();
            }
            string clrdir = FindDefClrPath(winfx_x64_dirs, winfx_x86_dirs);

            Console.WriteLine("Default CLR runtime assumed at: " + clrdir);
            RegistryKey reg = Registry.LocalMachine.OpenSubKey(
                @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment", true);
            List <string> names        = new List <string>(reg.GetValueNames());
            List <string> names_nocase = new List <string>();

            names.ForEach(delegate(string name) { names_nocase.Add(name.ToUpper()); });
            if (names_nocase.Contains("NETFX") && !ConfirmForEnvVarExists("NETFX"))
            {
                return;
            }
            if (is_x64 && names_nocase.Contains("NETFXX64") && !ConfirmForEnvVarExists("NETFXX64"))
            {
                return;
            }
            if (names_nocase.Contains("NETFXX86") && !ConfirmForEnvVarExists("NETFXX86"))
            {
                return;
            }
            if (names_nocase.Contains("DOTNET") && !ConfirmForEnvVarExists("DOTNET"))
            {
                return;
            }
            if (names_nocase.Contains("CLRDIR") && !ConfirmForEnvVarExists("CLRDIR"))
            {
                return;
            }
            if (reg.GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames)
                .ToString().ToUpper().Contains("%NETFX%") && !ConfirmForEnvVarExists("%NETFX% in PATH"))
            {
                return;
            }

            StringBuilder sb = new StringBuilder();

            for (int i = winfx_x86_dirs.Count - 1; i >= 0; i--)
            {
                if (sb.Length > 0)
                {
                    sb.Append(";");
                }
                sb.Append(winfx_x86_dirs[i]);
            }
            reg.SetValue("NETFXX86", sb.ToString(), RegistryValueKind.ExpandString);
            //Environment.SetEnvironmentVariable("NETFXX86", sb.ToString(), EnvironmentVariableTarget.Machine);
            Console.WriteLine("Set: NETFXX86 = " + reg.GetValue("NETFXX86").ToString());
            string netfxx86 = reg.GetValue("NETFXX86").ToString();

            sb.Length = 0;
            if (is_x64)
            {
                for (int i = winfx_x64_dirs.Count - 1; i >= 0; i--)
                {
                    if (sb.Length > 0)
                    {
                        sb.Append(";");
                    }
                    sb.Append(winfx_x64_dirs[i]);
                }
                reg.SetValue("NETFXX64", sb.ToString(), RegistryValueKind.ExpandString);
                //Environment.SetEnvironmentVariable("NETFXX64", sb.ToString() //+ ";%NETFXX86%"
                //    + netfxx86, EnvironmentVariableTarget.Machine);
                Console.WriteLine("Set: NETFXX64 = " + reg.GetValue("NETFXX64", "",
                                                                    RegistryValueOptions.DoNotExpandEnvironmentNames).ToString());
                reg.SetValue("NETFX", "%NETFXX64%;%NETFXX86%", RegistryValueKind.ExpandString);
                //Environment.SetEnvironmentVariable("NETFX", //"%NETFXX64%"
                //    reg.GetValue("NETFXX64").ToString(), EnvironmentVariableTarget.Machine);
            }
            else
            {
                reg.SetValue("NETFX", "%NETFXX86%", RegistryValueKind.ExpandString);
            }
            //Environment.SetEnvironmentVariable("NETFX", //"%NETFXX86%",
            //    reg.GetValue("NETFXX86").ToString(), EnvironmentVariableTarget.Machine);
            Console.WriteLine("Set: NETFX = " + reg.GetValue("NETFX", "",
                                                             RegistryValueOptions.DoNotExpandEnvironmentNames).ToString());
            reg.SetValue("DOTNET", "%NETFX%", RegistryValueKind.ExpandString);
            //Environment.SetEnvironmentVariable("DOTNET", "%NETFX%", EnvironmentVariableTarget.Machine);
            Console.WriteLine("Set: DOTNET = " + reg.GetValue("DOTNET", "",
                                                              RegistryValueOptions.DoNotExpandEnvironmentNames).ToString());
            reg.SetValue("CLRDIR", clrdir, RegistryValueKind.ExpandString);
            //Environment.SetEnvironmentVariable("CLRDIR", clrdir, EnvironmentVariableTarget.Machine);
            Console.WriteLine("Set: CLRDIR = " + reg.GetValue("CLRDIR").ToString());
            string path = reg.GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames)
                          .ToString().Replace(";%NETFX%", "").Replace("%NETFX%;", "") + ";%NETFX%";

            reg.SetValue("PATH", path, RegistryValueKind.ExpandString);
            //Environment.SetEnvironmentVariable("PATH", path, EnvironmentVariableTarget.Machine);
            Console.WriteLine("PATH = " + reg.GetValue("PATH", "",
                                                       RegistryValueOptions.None
                                                       ).ToString());
            Console.WriteLine("Restart Windows immediately for the changes to be applied.");
            //if (System.Diagnostics.Debugger.IsAttached)
            //{
            //Console.WriteLine("Press ENTER to exit...");
            //Console.ReadLine();
            //}
            Console.WriteLine("Press ENTER to restart Windows. Press ESC to restart manually.");
            ConsoleKeyInfo key = Console.ReadKey();

            if (key.Key == ConsoleKey.Enter)
            {
                System.Diagnostics.Process.Start("shutdown", "-r -t 0 -f");
            }
            else if (key.Key == ConsoleKey.Escape)
            {
                Console.WriteLine("Your system is currently UNSTABLE. Please reboot immediately.");
            }
        }