コード例 #1
0
        public override TaskStatus Run()
        {
            Info("Launching process...");

            if (GeneratesFiles && !(ProcessArguments.Contains(VarFileName) && (ProcessArguments.Contains(VarOutput) && (ProcessArguments.Contains(VarFileName) || ProcessArguments.Contains(VarFileNameWithoutExtension)))))
            {
                Error("Error in process command. Please read the documentation.");
                return(TaskStatus.Failed);
            }

            if (!GeneratesFiles)
            {
                var startSuccessful = StartProcess(ProcessPath, ProcessArguments, HideGui);
                return(startSuccessful ? TaskStatus.Completed : TaskStatus.Failed);
            }

            foreach (FileInf file in SelectFiles())
            {
                string cmd;
                string outputFilePath;

                try
                {
                    cmd = ProcessArguments.Replace(string.Format("{{{0}}}", VarFilePath), string.Format("\"{0}\"", file.Path));

                    const string outputRegexPattern = @"{\$output:(?:\$fileNameWithoutExtension|\$fileName)(?:[a-zA-Z0-9._-]*})";
                    var          outputRegex        = new Regex(outputRegexPattern);
                    var          m = outputRegex.Match(cmd);

                    if (m.Success)
                    {
                        string val = m.Value;
                        outputFilePath = val;
                        if (outputFilePath.Contains(VarFileNameWithoutExtension))
                        {
                            outputFilePath = outputFilePath.Replace(VarFileNameWithoutExtension, Path.GetFileNameWithoutExtension(file.FileName));
                        }
                        else if (outputFilePath.Contains(VarFileName))
                        {
                            outputFilePath = outputFilePath.Replace(VarFileName, file.FileName);
                        }
                        outputFilePath = outputFilePath.Replace("{" + VarOutput + ":", Workflow.WorkflowTempFolder.Trim('\\') + "\\");
                        outputFilePath = outputFilePath.Trim('}');

                        cmd = cmd.Replace(val, "\"" + outputFilePath + "\"");
                    }
                    else
                    {
                        Error("Error in process command. Please read the documentation.");
                        return(TaskStatus.Failed);
                    }
                }
                catch (ThreadAbortException)
                {
                    throw;
                }
                catch (Exception e)
                {
                    ErrorFormat("Error in process command. Please read the documentation. Error: {0}", e.Message);
                    return(TaskStatus.Failed);
                }

                if (StartProcess(ProcessPath, cmd, HideGui))
                {
                    Files.Add(new FileInf(outputFilePath, Id));

                    if (LoadAllFiles)
                    {
                        var files = Directory.GetFiles(Workflow.WorkflowTempFolder, "*.*", SearchOption.AllDirectories);

                        foreach (var f in files)
                        {
                            if (f != outputFilePath)
                            {
                                Files.Add(new FileInf(f, Id));
                            }
                        }
                    }
                }
            }

            Info("Task finished.");

            return(TaskStatus.Completed);
        }