private void WuModule(EntityPolicyModules policyModule) { var clientWuModule = new DtoClientWuModule(); var wuModule = new ServiceWuModule().GetModule(policyModule.ModuleId); clientWuModule.Guid = wuModule.Guid; clientWuModule.DisplayName = wuModule.Name; clientWuModule.Arguments = wuModule.AdditionalArguments; clientWuModule.Order = policyModule.Order; clientWuModule.Timeout = wuModule.Timeout; clientWuModule.RedirectOutput = wuModule.RedirectStdOut; clientWuModule.RedirectError = wuModule.RedirectStdError; foreach (var successCode in wuModule.SuccessCodes.Split(',')) { clientWuModule.SuccessCodes.Add(successCode); } if (policyModule.ConditionId != -1) { var conditionScript = new ServiceScriptModule().GetModule(policyModule.ConditionId); if (conditionScript != null) { clientWuModule.ConditionFailedAction = policyModule.ConditionFailedAction; clientWuModule.ConditionNextOrder = policyModule.ConditionNextModule; clientWuModule.Condition = new DtoClientModuleCondition(); clientWuModule.Condition.Arguments = conditionScript.Arguments; clientWuModule.Condition.DisplayName = conditionScript.Name; clientWuModule.Condition.Guid = conditionScript.Guid; clientWuModule.Condition.RedirectError = conditionScript.RedirectStdError; clientWuModule.Condition.RedirectOutput = conditionScript.RedirectStdOut; if (conditionScript.ImpersonationId != -1) { var scriptImpersonationGuid = new ServiceImpersonationAccount().GetGuid(conditionScript.ImpersonationId); if (!string.IsNullOrEmpty(scriptImpersonationGuid)) { clientWuModule.Condition.RunAs = scriptImpersonationGuid; } } clientWuModule.Condition.ScriptType = conditionScript.ScriptType; foreach (var successCode in conditionScript.SuccessCodes.Split(',')) { clientWuModule.Condition.SuccessCodes.Add(successCode); } clientWuModule.Condition.Timeout = conditionScript.Timeout; clientWuModule.Condition.WorkingDirectory = conditionScript.WorkingDirectory; } } var moduleFiles = new ServiceModule().GetModuleFiles(wuModule.Guid); foreach (var file in moduleFiles.OrderBy(x => x.FileName)) { var clientFile = new DtoClientFileHash(); clientFile.FileName = file.FileName; clientFile.FileHash = file.Md5Hash; clientWuModule.Files.Add(clientFile); } _clientPolicy.WuModules.Add(clientWuModule); }
private void InstallMsu(DtoClientFileHash file) { var directory = Path.Combine(DtoGobalSettings.BaseCachePath, _module.Guid) + Path.DirectorySeparatorChar; var pArgs = new DtoProcessArgs(); pArgs.RunWith = "wusa.exe"; pArgs.Command = "\"" + directory + file.FileName + "\""; pArgs.Arguments = "/quiet /norestart " + _module.Arguments; pArgs.Timeout = _module.Timeout; pArgs.WorkingDirectory = directory; pArgs.RedirectError = _module.RedirectError; pArgs.RedirectOutput = _module.RedirectOutput; var result = new ServiceProcess(pArgs).RunProcess(); Logger.Info(JsonConvert.SerializeObject(result)); Logger.Info("Windows Update Module: " + _module.DisplayName + "Finished"); _moduleResult.ExitCode = result.ExitCode.ToString(); if (!_module.SuccessCodes.Contains(result.ExitCode.ToString())) { _moduleResult.Success = false; _moduleResult.ErrorMessage = result.StandardError; } }