WPF, Silverlight, Windows Phone 8 und Windows Store Apps

Windows Store Apps: Externe Prozesse ausführen
Kommentare

In der Kolumne „XAML Expertise“ präsentiert Gregor Biswanger Top-How-tos zum Thema XAML. Einsteiger und Fortgeschrittene XAML-Experten sollen hier durch geballtes Wissen gesättigt werden. Heute gibt es folgende Expertise: „Windows Store Apps: Externe Prozesse ausführen“. Viel Spaß mit XAML Expertise.

Windows Store Apps befinden sich aus Sicherheitsgründen in einer Sandbox. Das bedeutet, dass sie nicht automatisiert im Hintergrund auf beliebige Windows-Programme zugreifen kann. Es ist nur möglich, Dateien durch Benutzerinteraktionen beliebig zu öffnen und zu speichern. Mit Windows 8.1 Update 1 wurde diese Regel für ganz besondere Windows Store Apps gesprengt: so genannte Side-loaded Windows Store Apps, die explizit für Unternehmen gedacht sind und nicht in den öffentlichen Store dürfen. Mit ihnen ist es möglich, auf gewöhnliche .NET Framework Libraries oder externe Prozesse ohne Benutzerinteraktion zuzugreifen. Für diese erweiterte Funktionalität sind die so genannten Brokered Windows Runtime Components nötig. Als ersten Schritt werden die „Brokered WinRT Component Project Templates“ bezogen und installiert. Anschließend ist Visual Studio 2013 mit Administratorrechten neu zu starten.

Aus Windows Store App die Konsole öffnen

Im folgenden Beispiel soll die Windows-Konsole von einer Windows Store App aus geöffnet werden. Dazu erstellen wir zuerst ein neues Windows-Store-Projekt. Diesem fügen wir eine neue Brokered Windows Runtime Component mit dem Namen MyBrokeredComponent hinzu. Unser neues Projekt enthält eine leere Klasse mit dem Namen Class. Genauso wie standardmäßige Windows Runtime Components muss auch die Brokered-Variante immer mit sealed deklariert bleiben. Unsere Klasse benennen wir schließlich in ProcessManager um. Dann wird eine StartConsole-Methode hinzugefügt, die die statische Process-Klasse von System.Diagnostics erhält. Damit lässt sich einfach die Konsole mit der Startmethode öffnen:

namespace MyBrokeredComponent
{
  public sealed class ProcessManager
  {
    public void StartConsole()
    {
      Process.Start("cmd", "");
    }
  }
} 

Die neue Komponente kann nicht einfach von der Windows Store App referenziert werden. Stattdessen wird hierzu ein Proxy benötigt, für den es eine weitere Projektvorlage gibt, die allerdings nur in Visual C++ existiert. Das braucht uns aber nicht weiter zu stören, denn bis auf ein paar Zeilen wird kein Code benötigt. Wir wählen also die neue Projektvorlage aus und geben ihr den Namen MyBrokeredComponentProxyStub.

Für die Einstellungen gehen wir in die Projekteigenschaften des soeben erzeugten MyBrokeredComponentProxyStub und referenzieren die MyBrokeredComponent unter „Common Properties“ bei „References“. Wählen Sie dazu über den Add-New-Reference…-Button das MyBrokeredComponent-Projekt aus und bestätigen Sie (Abb. 1).

Im nächsten Schritt wird festgelegt, dass der Proxy automatisch beim Builden im System registriert werden soll. Diesen Punkt finden wir bei Configuration Properties unter Linker. Auf der rechten Seite wählen wir Yes neben Register Output.

Abb. 1: Einstellungen des „MyBrokeredComponentProxyStub“

Jetzt kann die Windows Store App den erzeugten Proxy referenzieren und dadurch den Zugriff auf die MyBrokeredComponent ermöglichen. Als Beispiel implementieren wir in der MainPage.xaml.cs-Datei ein Loaded-Event. Innerhalb der auszulösenden Methode wird auf ProcessManager.StartConsole() zugegriffen (Listing 1).

public sealed partial class MainPage : Page
{
  public MainPage()
  {
    this.InitializeComponent();
    Loaded += OnMainPageLoaded;
  }

  private void OnMainPageLoaded(object sender, RoutedEventArgs e)
  {
    ProcessManager processManager = new ProcessManager();
    processManager.StartConsole();
  }
}

Damit jetzt auch zur Laufzeit die Unterstützung von Brokered Components explizit erlaubt wird, muss zum Schluss einmalig die AppX-Manifest-Datei erweitert werden. Klicken Sie dazu rechts auf die Package.appxmanifest-Datei und im Kontextmenü auf „View Code“. Der XML-Code aus Listing 2 wird am Ende vor geschrieben. Anschließend ist der Name des Namespace, der Klasse, auf die unter ActivatableClassId zugegriffen wird und des kompletten Verzeichnispfads zur MyBrokeredComponent zu ändern. Beachten Sie, dass der Pfad passend geändert werden muss, wenn die App später im Unternehmen veröffentlicht wird.




  
    
      clrhost.dll
      
        
      
    
  


 

Die Brokered-Windows-Store-App ist nun fertig und öffnet bei ihrem Start automatisch die Windows-Konsole. Ein Videotutorial zum Thema Sonderrechte für Side-loaded Windows-Store-Apps im Unternehmen finden Sie hier.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -