[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
}\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
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
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
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
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
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
}\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