Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/ArgumentHandling/ArgumentHandling.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/ArgumentHandling/ArgumentHandling.cs	(revision 8563)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/ArgumentHandling/ArgumentHandling.cs	(revision 8563)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.RegularExpressions;
+
+namespace HeuristicLab.PluginInfrastructure {
+  public static class ArgumentHandling {
+    public const string StartToken = "start";
+
+    public static IArgument[] GetArguments(string[] args) {
+      var arguments = new HashSet<IArgument>();
+      foreach (var entry in args) {
+        var argument = ParseArgument(entry);
+        if (argument != null && argument.Valid) arguments.Add(argument);
+      }
+      return arguments.ToArray();
+    }
+
+    private static Argument ParseArgument(string entry) {
+      var regex = new Regex("^/[a-z]+(:[A-Za-z0-9 ]+)?$");
+      if (!regex.IsMatch(entry)) return null;
+      entry = entry.Remove(0, 1);
+      var parts = entry.Split(':');
+      string key = parts[0];
+      string value = parts.Length == 2 ? parts[1].Trim() : string.Empty;
+      switch (key) {
+        case StartToken: return new StartArgument(value);
+        default: return null;
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/ArgumentHandling/Arguments.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/ArgumentHandling/Arguments.cs	(revision 8563)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/ArgumentHandling/Arguments.cs	(revision 8563)
@@ -0,0 +1,48 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.PluginInfrastructure {
+  public abstract class Argument : IArgument {
+    public string Value { get; private set; }
+    public abstract bool Valid { get; }
+
+    protected Argument(string value) {
+      this.Value = value;
+    }
+
+    public override bool Equals(object obj) {
+      if (obj == null || this.GetType() != obj.GetType()) return false;
+      return this.Value == ((Argument)obj).Value;
+    }
+
+    public override int GetHashCode() {
+      return GetType().GetHashCode();
+    }
+  }
+
+  public class StartArgument : Argument {
+    public override bool Valid {
+      get { return !string.IsNullOrEmpty(Value); }
+    }
+
+    public StartArgument(string value) : base(value) { }
+  }
+}
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/ArgumentHandling/IArgument.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/ArgumentHandling/IArgument.cs	(revision 8563)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/ArgumentHandling/IArgument.cs	(revision 8563)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.PluginInfrastructure {
+  public interface IArgument {
+    string Value { get; }
+    bool Valid { get; }
+  }
+}
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj	(revision 8536)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj	(revision 8563)
@@ -223,4 +223,7 @@
       <DependentUpon>PluginView.cs</DependentUpon>
     </Compile>
+    <Compile Include="ArgumentHandling\ArgumentHandling.cs" />
+    <Compile Include="ArgumentHandling\Arguments.cs" />
+    <Compile Include="ArgumentHandling\IArgument.cs" />
     <Compile Include="Attributes\ApplicationAttribute.cs" />
     <Compile Include="Attributes\ContactInformationAttribute.cs" />
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Main.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Main.cs	(revision 8536)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Main.cs	(revision 8563)
@@ -42,5 +42,5 @@
           Application.EnableVisualStyles();
           Application.SetCompatibleTextRenderingDefault(false);
-          Application.Run(new StarterForm());
+          Application.Run(new StarterForm(args));
         }
         catch (Exception ex) {
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.Designer.cs	(revision 8536)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.Designer.cs	(revision 8563)
@@ -181,5 +181,6 @@
       this.Name = "StarterForm";
       this.Text = "HeuristicLab Starter";
-      this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
+      this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.StarterForm_FormClosing);
+      this.Shown += new System.EventHandler(this.StarterForm_Shown);
       this.ResumeLayout(false);
 
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.cs	(revision 8536)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.cs	(revision 8563)
@@ -26,8 +26,8 @@
 using System.Linq;
 using System.Threading;
+using System.Threading.Tasks;
 using System.Windows.Forms;
 using HeuristicLab.PluginInfrastructure.Advanced;
 using HeuristicLab.PluginInfrastructure.Manager;
-using System.Threading.Tasks;
 
 namespace HeuristicLab.PluginInfrastructure.Starter {
@@ -46,4 +46,6 @@
     private SplashScreen splashScreen;
     private bool updatesAvailable = false;
+    private string[] arguments;
+
     /// <summary>
     /// Initializes an instance of the starter form.
@@ -127,4 +129,31 @@
     }
 
+    /// <summary>
+    /// Creates a new StarterForm and passes the arguments in <paramref name="args"/>.
+    /// </summary>
+    /// <param name="args">The arguments that should be processed</param>
+    public StarterForm(string[] args)
+      : this() {
+      this.arguments = args;
+    }
+
+    private void StarterForm_Shown(object sender, EventArgs e) {
+      foreach (var argument in ArgumentHandling.GetArguments(arguments)) {
+        if (argument is StartArgument) {
+          var appDesc = (from desc in pluginManager.Applications
+                         where desc.Name == argument.Value
+                         select desc).SingleOrDefault();
+          if (appDesc != null) {
+            StartApplication(appDesc);
+          } else {
+            MessageBox.Show("Cannot start application " + argument.Value + ".",
+                            "HeuristicLab",
+                            MessageBoxButtons.OK,
+                            MessageBoxIcon.Warning);
+          }
+        }
+      }
+    }
+
     private void applicationsListView_ItemActivate(object sender, EventArgs e) {
       if (applicationsListView.SelectedItems.Count > 0) {
@@ -259,5 +288,5 @@
     }
 
-    private void MainForm_FormClosing(object sender, FormClosingEventArgs e) {
+    private void StarterForm_FormClosing(object sender, FormClosingEventArgs e) {
       splashScreen.Close();
       abortRequested = true;
