using System;
using System.Globalization;
using System.Linq;

// Namespace für die Remoteverbindung unter Verwendung der Microsoft.Smartdevice.Connectivity.dll
using Microsoft.SmartDevice.Connectivity;

namespace DeploymentExample
{
    class SilverlightDeployment
    {        
        static void Main(string[] args)
        {
            // Product ID der bereitzustellenden Anwendung
            var productID = new Guid("0b65a202-bc79-4905-ab31-5901775788f4");

            // Initialisierung des Datastore Managers
            DatastoreManager myDatastoreManager = new DatastoreManager(CultureInfo.CurrentUICulture.LCID);
            
            // Auswählen der Windows Phone 7 Plattform
            Platform WP7SDK = myDatastoreManager.GetPlatforms().Single(p => p.Name == "Windows Phone 7");
            
            // Auswählen des Gerätes; hier der Emulator
            Device WP7Device = WP7SDK.GetDevices().Single(d => d.Name == "Windows Phone 7 Emulator");
       
            // für die Verbindung zu einem Endgerät
            // Device WP7Device = WP7SDK.GetDevices().Single(d => d.Name == "Windows Phone 7 Device");

            // Verbindung zum Emulator/Gerät herstellen
            WP7Device.Connect();

            // Prüfung, ob ist Emulator/Gerät verbunden ist
            if (WP7Device.IsConnected())
            {
                // Prüfung, ob Anwendung bereits installiert ist
                if (WP7Device.IsApplicationInstalled(productID))
                {
                    // Anwendung deinstallieren
                    WP7Device.GetApplication(productID).Uninstall();
                }

                try
                {
                    // Anwendung installieren
                    // benoetigte Parameter, die vor der Ausfuehrung entsprechend gesetzt werden muessen
                    //
                    // Produkt ID der bereitzustellenden Applikation, Produkt ID der bereitzustellenden Applikation, Kategorie, Icondatei, Applikation
                    var installApp = WP7Device.InstallApplication(productID, productID, "NormalApp", "icon.png", "test.xap");

                    // Anwendung starten
                    installApp.Launch();
                }
                catch (ArgumentException)
                {
                    Console.WriteLine("Sie haben falsche bzw. ungültige Argumente beim Aufruf der InstallApplication-Methode angegeben!");                    
                }             
            }
        }
    }
}
