Tornando in thread, per lanciare comandi esterni si usa normalmente System.Diagnostics.Process.Start (ti restituisce un oggetto Process che puoi usare per tenere d'occhio lo stato del processo creato).
Per partire in modalità "elevata", essenzialmente ci sono due possibilità:
  • richiedi che il tuo processo parta come processo elevato, e quindi usi normalmente Process.Start; dato che un processo elevato di default avvia altri processi elevati, non devi fare nulla di particolare al momento di avviare i processi figli. In questo caso, quindi, dovrai specificare nel manifest del tuo progetto che il tuo programma richiede privilegi amministrativi per essere eseguito (vedi qui);
  • in alternativa, usa il verb "runas" all'avvio dei comandi come specificato qui.