예제 #1
0
        protected override void Execute(CodeActivityContext context)
        {
            var filename               = Filename.Get(context);
            var arguments              = Arguments.Get(context);
            var workingdirectory       = WorkingDirectory.Get(context);
            var waitforexit            = WaitForExit.Get(context);
            var waitforexittimeout     = WaitForExitTimeout.Get(context);
            ProcessStartInfo startInfo = new ProcessStartInfo();

            filename                   = Environment.ExpandEnvironmentVariables(filename);
            startInfo.FileName         = filename;
            startInfo.Arguments        = arguments;
            startInfo.WorkingDirectory = workingdirectory;
            var p = Process.Start(startInfo);

            if (waitforexit)
            {
                if (waitforexittimeout.TotalMilliseconds > 50)
                {
                    p.WaitForExit((int)waitforexittimeout.TotalMilliseconds);
                }
                else
                {
                    p.WaitForExit();
                }
            }
        }
예제 #2
0
        protected void ValidateInputArguments(CodeActivityContext context)
        {
            ValidateWorkingDirectory(context);
            ValidateFilename(context, true); // For processes we want to look in directories from PATH

            if (WaitForExit.Get(context) && WaitForExitTimeout.Get(context) == 0)
            {
                throw new ArgumentException("WaitForExit is set to True but the WaitForExitTimeout is 0.");
            }
        }
예제 #3
0
        protected override void Execute(CodeActivityContext context)
        {
            ValidateInputArguments(context);

            var processInvokeWrapper = new RunProcessWrapper(FileName.Get(context),
                                                             Arguments.Get(context),
                                                             WorkingDirectory.Get(context),
                                                             CaptureOutput.Get(context),
                                                             WaitForExit.Get(context),
                                                             WaitForExitTimeout.Get(context),
                                                             KillAtTimeout.Get(context));

            processInvokeWrapper.StartProcess();

            ProcessId.Set(context, processInvokeWrapper.ProcessId);
            Finished.Set(context, processInvokeWrapper.Finished);
            Output.Set(context, processInvokeWrapper.StandardOutput);
            Error.Set(context, processInvokeWrapper.StandardError);
            ExitCode.Set(context, processInvokeWrapper.ExitCode);
        }
예제 #4
0
        public void WriteXml(XmlWriter writer)
        {
            if (ID == Guid.Empty)
            {
                ID = Guid.NewGuid();
            }

            writer.WriteStartElement("Application");
            writer.WriteAttributeString("ID", ID.ToString());
            writer.WriteAttributeString("Name", Name);
            writer.WriteAttributeString("RelativePath", RelativePath);
            writer.WriteAttributeString("Arguments", Arguments);
            writer.WriteAttributeString("WaitForExit", WaitForExit.ToString());
            writer.WriteAttributeString("SuccessExitCode", SuccessExitCode.ToString());
            writer.WriteAttributeString("DistributionOnly", DistributionOnly.ToString());
            foreach (DistributionSource source in Sources)
            {
                source.WriteXml(writer);
            }
            writer.WriteEndElement();
        }