OSDN Git Service

na-get-lib,\83インストール・アンインストール時にプロセスの優先順位を下げるようにした・。
authorttp <ttp@users.sourceforge.jp>
Sat, 12 Sep 2009 16:22:33 +0000 (01:22 +0900)
committerttp <ttp@users.sourceforge.jp>
Sat, 12 Sep 2009 16:22:33 +0000 (01:22 +0900)
na-get-lib/NaGet.InteropServices/CreateProcessCaller.cs
na-get-lib/NaGet.Packages.Install/Installation.cs
na-get-lib/NaGet.Packages.Install/Uninstallation.cs
na-get-lib/NaGet/Env.cs

index 696e686..7223410 100644 (file)
@@ -82,6 +82,16 @@ namespace NaGet.InteropServices
                [return: MarshalAs(UnmanagedType.Bool)]\r
                static extern bool GetExitCodeProcess(IntPtr hProcess, out int lpExitCode);\r
                \r
+               #region 優先度関連\r
+               \r
+               [DllImport("kernel32.dll")]\r
+               static extern uint GetPriorityClass(IntPtr hProcess);\r
+               \r
+               [DllImport("kernel32.dll")]\r
+               static extern bool SetPriorityClass(IntPtr hProcess, uint dwPriorityClass);\r
+               \r
+               #endregion\r
+               \r
                #region 権限降格関連\r
                \r
                [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError=true)]\r
@@ -265,6 +275,18 @@ namespace NaGet.InteropServices
                }\r
                \r
                /// <summary>\r
+               /// プロセスの優先度を取得または設定します。\r
+               /// </summary>\r
+               public ProcessPriorityClass PriorityClass {\r
+                       get {\r
+                               return (ProcessPriorityClass) GetPriorityClass(pi.hProcess);\r
+                       }\r
+                       set {\r
+                               SetPriorityClass(pi.hProcess, (uint) value);\r
+                       }\r
+               }\r
+               \r
+               /// <summary>\r
                /// プロセスのハンドルを開放する\r
                /// </summary>\r
                public void Dispose()\r
index fd0523a..f4fb5aa 100644 (file)
@@ -282,6 +282,13 @@ namespace NaGet.Packages.Install
                                default:\r
                                        throw new NotImplementedException("Not implemented archive installation yet");\r
                                }\r
+                               \r
+                               if (NaGet.Env.InstallProcessOnBackground) {\r
+                                       try {\r
+                                               hProcess.PriorityClass = ProcessPriorityClass.Idle;\r
+                                       } catch (Exception) {}\r
+                               }\r
+                               \r
                                hProcess.WaitForExit();\r
                                \r
                                return hProcess.ExitCode;\r
@@ -309,6 +316,12 @@ namespace NaGet.Packages.Install
                                using (Process hProcess = createExtractArchiveProcess(argument,\r
                                                                                      this.OutputDataReceived,\r
                                                                                      this.ErrorDataReceived)) {\r
+                                       if (NaGet.Env.InstallProcessOnBackground) {\r
+                                               try {\r
+                                                       hProcess.PriorityClass = ProcessPriorityClass.Idle;\r
+                                               } catch (Exception) {}\r
+                                       }\r
+                                       \r
                                        hProcess.WaitForExit();\r
                                \r
                                        if (hProcess.ExitCode != 0) {\r
index dabff44..eebcd80 100644 (file)
@@ -89,6 +89,12 @@ namespace NaGet.Packages.Install
                                        NaGet.Utils.ConvertToDataReceivedEventHandler(OutputDataReceived),\r
                                        NaGet.Utils.ConvertToDataReceivedEventHandler(ErrorDataReceived)) ) {\r
                                        \r
+                                       if (NaGet.Env.InstallProcessOnBackground) {\r
+                                               try {\r
+                                                       hProcess.PriorityClass = ProcessPriorityClass.Idle;\r
+                                               } catch (Exception) {}\r
+                                       }\r
+                                       \r
                                        hProcess.WaitForExit();\r
                                        \r
                                        exitValue = hProcess.ExitCode;\r
@@ -100,6 +106,12 @@ namespace NaGet.Packages.Install
                                        NaGet.Utils.ConvertToDataReceivedEventHandler(OutputDataReceived),\r
                                        NaGet.Utils.ConvertToDataReceivedEventHandler(ErrorDataReceived)) ) {\r
                                        \r
+                                       if (NaGet.Env.InstallProcessOnBackground) {\r
+                                               try {\r
+                                                       hProcess.PriorityClass = ProcessPriorityClass.Idle;\r
+                                               } catch (Exception) {}\r
+                                       }\r
+                                       \r
                                        hProcess.WaitForExit();\r
                                        \r
                                        exitValue = hProcess.ExitCode;\r
@@ -111,6 +123,13 @@ namespace NaGet.Packages.Install
                                        procInfo.CreateNoWindow = true;\r
                                }\r
                                using (NaGet.InteropServices.CreateProcessCaller p = new NaGet.InteropServices.CreateProcessCaller(procInfo)) {\r
+                                       \r
+                                       if (NaGet.Env.InstallProcessOnBackground) {\r
+                                               try {\r
+                                                       p.PriorityClass = ProcessPriorityClass.Idle;\r
+                                               } catch (Exception) {}\r
+                                       }\r
+                                       \r
                                        p.WaitForExit();\r
                                        \r
                                        exitValue = p.ExitCode;\r
index 4268c82..f470b93 100644 (file)
@@ -176,5 +176,21 @@ namespace NaGet
                }\r
                \r
                #endregion\r
+               \r
+               #region インストールプロセス\r
+               \r
+               static bool installOnBackground = true;\r
+\r
+               /// <summary>\r
+               /// インストールプロセスをバックグラウンドで行うか?\r
+               /// </summary>\r
+               public static bool InstallProcessOnBackground {\r
+                       get { return installOnBackground; }\r
+                       set { installOnBackground = value; }\r
+               }\r
+               \r
+               \r
+               #endregion\r
+               \r
        }\r
 }\r