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