Freigeben über


Exemplarische Vorgehensweise: Austauschen von Daten zwischen Desktop- und Geräteanwendung

Aktualisiert: November 2007

In dieser exemplarischen Vorgehensweise erstellen Sie eine Geräte-Agent-Anwendung, eine Desktopanwendung und ein Add-On-Paket im Datenspeicher. Über die Desktopanwendung wird der Geräte-Agent abhängig von den Informationen im Add-On-Paket bereitgestellt und gestartet. Anschließend tauscht die Desktopanwendung Paketdaten mit der Geräte-Agent-Anwendung aus und beendet die Anwendung. Sie führen dabei folgende Aufgaben aus:

  • Erstellen einer verwalteten Geräte-Agent-Anwendung

  • Erstellen eines Add-On-Pakets für die Geräte-Agent-Anwendung

  • Erstellen einer Desktopanwendung, die das Paket startet und mit dem Geräte-Agent kommuniziert

Hinweis:

Ihr Computer zeigt möglicherweise für einige der Elemente der Visual Studio-Benutzeroberfläche in der folgenden Anleitung andere Namen oder Standorte an. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Visual Studio-Einstellungen.

Erstellen einer Geräte-Agent-Anwendung

So erstellen Sie eine Geräte-Agent-Anwendung

  1. Starten Sie Visual Studio.

  2. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.

    Das Dialogfeld Neues Projekt wird angezeigt.

  3. (Visual C#) Erweitern Sie Visual C#, und klicken Sie dann auf Intelligentes Gerät. Nennen Sie das Projekt DeviceAgent und die Projektmappe DataExchange. Klicken Sie auf OK.

    (Visual Basic) Erweitern Sie Visual Basic, und klicken Sie dann auf Intelligentes Gerät. Nennen Sie das Projekt DeviceAgent und die Projektmappe DataExchange. Klicken Sie auf OK.

    Das Dialogfeld Neues Projekt für intelligente Geräte hinzufügen wird angezeigt.

  4. Wählen Sie Windows Mobile 5.0 Smartphone SDK für die Zielplattform, klicken Sie im Bereich Vorlagen auf Konsolenanwendung und dann auf OK.

    Das neue DeviceAgent-Projekt wird im Projektmappen-Explorer angezeigt.

  5. (Visual C#) Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Verweise, und klicken Sie dann auf Verweis hinzufügen.

    (Visual Basic) Klicken Sie mit der rechten Maustaste im Projektmappen-Explorer auf DeviceAgent, und klicken Sie dann auf Verweis hinzufügen.

    Das Dialogfeld Verweis hinzufügen wird angezeigt.

  6. Klicken Sie auf die Registerkarte Durchsuchen, und navigieren Sie zu Laufwerk:\Programme\Gemeinsame Dateien\Microsoft Shared\CoreCon\1.0\Target\Lib. Klicken Sie auf Microsoft.Smartdevice.DeviceAgentTransport.dll und dann auf OK.

    Dem Projekt wird ein Verweis auf Microsoft.Smartdevice.DeviceAgentTransport hinzugefügt.

  7. Doppelklicken Sie im Projektmappen-Explorer auf Program.cs (C#) oder Module1.vb (Visual Basic), um die Datei im Code-Editor zu öffnen, falls sie noch nicht geöffnet ist.

  8. Positionieren Sie den Cursor am Anfang der Datei.

  9. Fügen Sie folgenden Code ein:

    using Microsoft.SmartDevice.DeviceAgentTransport;
    
    Imports Microsoft.SmartDevice.DeviceAgentTransport
    
  10. Positionieren Sie den Cursor in der Main-Methode.

  11. Fügen Sie folgenden Code ein:

    string[] serviceids = {"A92866CA-AE83-4848-9438-501D8DB3CF25"};
    
    IDeviceAgentTransport transport = DeviceAgentTransportFactory.GetAgentTransport();
    
    // Don't keep it waiting.
    transport.AcknowledgeLaunch(1, serviceids);
    
    IDevicePacketStream packetstream;
    
    transport.AcceptConnectionEx(serviceids[0], out packetstream);
    IPacket packet;
    packet = PacketFactory.GetNewPacket();
    packet.WriteInt32(Environment.Version.Major);
    packet.WriteInt32(Environment.Version.Minor);
    packet.WriteInt32(Environment.Version.Build);
    packet.WriteInt32(Environment.Version.Revision);
    packetstream.Write(packet);
    
    Dim serviceids(0 To 0) As String
    serviceids(0) = "A92866CA-AE83-4848-9438-501D8DB3CF25"
    
    Dim transport As IDeviceAgentTransport = DeviceAgentTransportFactory.GetAgentTransport()
    
    ' Don't keep it waiting.
    transport.AcknowledgeLaunch(1, serviceids)
    
    Dim packetstream As IDevicePacketStream
    
    transport.AcceptConnectionEx(serviceids(0), packetstream)
    Dim packet As IPacket
    packet = PacketFactory.GetNewPacket()
    packet.WriteInt32(Environment.Version.Major)
    packet.WriteInt32(Environment.Version.Minor)
    packet.WriteInt32(Environment.Version.Build)
    packet.WriteInt32(Environment.Version.Revision)
    packetstream.Write(packet)
    

    Im vorangehenden Code wird ein IDeviceAgentTransport-Objekt erstellt und anschließend eine Verbindung vom Desktopcomputer akzeptiert. Das Programm sendet ein Paket an den Desktopcomputer, das Informationen zur .NET Compact Framework-Version enthält.

  12. Klicken Sie im Menü Erstellen auf Projektmappe erstellen.

    Sie verfügen jetzt über eine Anwendung für intelligente Geräte mit dem Namen DeviceAgent. Später stellen Sie diese Anwendung für das Gerät bereit.

Erstellen Sie ein Add-On-Paket im Datenspeicher.

So erstellen Sie ein Add-On-Paket im Datenspeicher

  1. Starten Sie den Editor.

  2. Kopieren Sie Folgendes in die Textdatei:

    <?xml version="1.0" standalone="no"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:template match="/">
        <ADDONCONTAINER>
          <ADDON>
            <PACKAGECONTAINER>
              <PACKAGE ID="" NAME="DeviceAgent">
                <PROPERTYCONTAINER />
                <PACKAGETYPECONTAINER>
                  <PACKAGETYPE Name="ARMV4I" ID="ARMV4I" Protected="True">
                    <PROPERTYCONTAINER>
                      <PROPERTY ID="RemotePath" Protected="True">%CSIDL_PROGRAM_FILES%\DeviceAgent</PROPERTY>
                      <PROPERTY ID="RootPath" Protected="True">C:\DataExchange\DeviceAgent\bin\Debug</PROPERTY>
                      <PROPERTY ID="CPU" Protected="True">ARMV4I</PROPERTY>
                      <PROPERTY ID="Host" Protected="True">DeviceAgent</PROPERTY>
                    </PROPERTYCONTAINER>
                    <FILECONTAINER>
                      <FILE ID="DeviceAgent.exe" />
                      <FILE ID="Microsoft.Smartdevice.DeviceAgentTransport.dll" />
                      <FILE ID="DeviceAgentTransport.dll" />
                    </FILECONTAINER>
                  </PACKAGETYPE>
                </PACKAGETYPECONTAINER>
              </PACKAGE>
            </PACKAGECONTAINER>
          </ADDON>
        </ADDONCONTAINER>
      </xsl:template>
    </xsl:stylesheet>
    
  3. Klicken Sie in Visual Studio im Menü Extras auf GUID erstellen.

    Das Dialogfeld GUID erstellen wird angezeigt.

  4. Wählen Sie Registrierungsformat aus, klicken Sie auf Kopieren und dann auf Beenden.

  5. Fügen Sie die GUID im Editor in das ID-Attribut des Pakettags ein, und entfernen Sie die geschweiften Klammern, in die die GUID eingeschlossen ist.

    Beispiel: <Package ID="9C50B38D-4259-40b3-AE9F-C5887DD898FF" Name="DeviceAgent">.

  6. Ändern Sie den Wert des <PROPERTY ID="RootPath" Protected="True">-Tags in den Ordner, in dem sich DeviceAgent.exe befindet.

    Beispiel: <PROPERTY ID="RootPath" Protected="True">c:\DataExchange\DeviceAgent\bin\debug</PROPERTY>.

    Hinweis:

    Um den Speicherort von DeviceAgent.exe zu bestimmen, klicken Sie mit der rechten Maustaste auf das DeviceAgent-Projekt im Projektmappen-Explorer und klicken dann auf Eigenschaften. Klicken Sie auf die Registerkarte Erstellen und dann neben Ausgabepfad auf Durchsuchen.

  7. Kopieren Sie die Bibliothek unter Laufwerk:\Programme\Gemeinsame Dateien\Microsoft Shared\CoreCon\1.0\Target\wce400\armv4i\DeviceAgentTransport.dll in den unter dem Stammpfad angegebenen Pfad.

    Hinweis:

    Dieser Schritt ist wichtig, da die Assembly Microsoft.Smartdevice.DeviceAgentTransport.dll die Bibliothek DeviceAgentTransport.dll verwendet. Beide Dateien müssen mit der Anwendung bereitgestellt werden.

  8. Speichern Sie die Datei im Editor.

    \ProgramData\Microsoft\corecon\1.0\addons\package.xsl (Windows Vista)

    \Dokumente und Einstellungen\All Users\Anwendungsdaten\Microsoft\corecon\1 .0 \addons\package.xsl (sonstige)

    Hinweis:

    Wenn der Dateiname package.xsl bereits verwendet wird, verwenden Sie einen anderen Namen. Der Dateiname ist nicht wichtig, da alle Dateien im Ordner als Add-On-Pakete verarbeitet werden.

  9. Beenden und starten Sie Visual Studio neu.

    Der Add-On-Paketordner wird von Visual Studio beim Starten geladen. Wenn Visual Studio ordnungsgemäß gestartet wird, ist das Paket frei von Syntaxfehlern.

    Der Datenspeicher enthält jetzt ein Add-On-Paket mit dem Namen DeviceAgent und eine eindeutige von Visual Studio generierte ID. Wenn das Paket bereitgestellt wird, kopiert die Smart Device Connectivity-API drei Dateien aus dem Ausgabeordner des DeviceAgent-Projekts in das Verzeichnis Laufwerk:\Programme\DeviceAgent des Geräts. Anschließend wird DeviceAgent.exe für das Gerät ausgeführt.

Erstellen einer Desktopanwendung zur Bereitstellung des Pakets und zur Kommunikation mit dem Geräte-Agent

So erstellen Sie eine Desktopanwendung, die das Paket bereitstellt und mit dem Geräte-Agent kommuniziert

  1. Zeigen Sie in Visual Studio im Menü Datei auf Öffnen, und klicken Sie dann auf Projekt/Projektmappe.

    Das Dialogfeld Projekt öffnen wird angezeigt.

  2. Navigieren Sie zur Projektmappe DataExchange.sln, klicken Sie auf die Projektmappe und dann auf Öffnen.

    Der Projektmappen-Explorer wird mit der DeviceAgent-Anwendung angezeigt.

  3. Zeigen Sie im Menü Datei auf Hinzufügen, und klicken Sie auf Neues Projekt.

    Das Dialogfeld Neues Projekt wird angezeigt.

  4. (Visual C#) Erweitern Sie Visual C#, und klicken Sie auf Windows.

    (Visual Basic) Erweitern Sie Visual Basic, und klicken Sie auf Windows.

  5. Klicken Sie im Bereich Vorlagen auf Konsolenanwendung.

  6. Benennen Sie das Projekt mit DesktopSide, und klicken Sie auf OK.

    Der Projektmappen-Explorer enthält zwei Projekte: DeviceAgent und DesktopSide.

  7. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt DesktopSide, und klicken Sie dann auf Als Startprojekt festlegen.

  8. (Visual C#) Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste im DesktopSide-Projekt auf Verweise, und klicken Sie anschließend auf Verweis hinzufügen.

    (Visual Basic) Klicken Sie mit der rechten Maustaste im Projektmappen-Explorer auf DesktopSide, und klicken Sie dann auf Verweis hinzufügen.

    Das Dialogfeld Verweis hinzufügen wird angezeigt.

  9. Klicken Sie auf die Registerkarte Durchsuchen, navigieren Sie zu Laufwerk:\Programme\Gemeinsame Dateien\Microsoft Shared\CoreCon\1.0\Bin, klicken Sie auf Microsoft.Smartdevice.Connectivity.dll und dann auf OK.

    Dem DesktopSide-Projekt wird ein Verweis auf Microsoft.Smartdevice.Connectivity hinzugefügt.

  10. Doppelklicken Sie im Projektmappen-Explorer im DesktopSide-Projekt auf Program.cs (C#) oder Module1.vb (Visual Basic), um die Datei im Code-Editor zu öffnen, falls sie noch nicht geöffnet ist.

  11. Positionieren Sie den Cursor am Anfang der Datei.

  12. Fügen Sie folgenden Code ein:

    using Microsoft.SmartDevice.Connectivity;
    using System.Collections.ObjectModel;
    
    Imports Microsoft.SmartDevice.Connectivity
    Imports System.Collections.ObjectModel
    
  13. Positionieren Sie den Cursor in der Main-Methode.

  14. Fügen Sie folgenden Code ein:

    // Change the locale ID to correspond to your installation of Visual Studio.
    DatastoreManager dsmgr = new DatastoreManager(1033);
    Platform platform = GetPlatformByName("Windows Mobile 5.0 Smartphone SDK", dsmgr);
    Device emulator = platform.GetDevice(platform.GetDefaultDeviceId());
    emulator.Connect();
    // Add the GUID of your package below.
    RemoteAgent ra = emulator.GetRemoteAgent(new ObjectId(""));
    ra.Start("command line argument");
    DevicePacketStream ps = ra.CreatePacketStream(new ObjectId("A92866CA-AE83-4848-9438-501D8DB3CF25"));
    Packet packet;
    packet = new Packet();
    while (ps.IsConnected())
    {
        if (ps.IsPacketAvailable())
        {
            packet = ps.Read();
            while (!packet.IsEndOfPacket())
            {
                switch (packet.ReadDataType())
                {
                    case DataType.Int32Type:
                        Console.WriteLine("Int32Type:  " + packet.ReadInt32().ToString());
                        break;
                    case DataType.StringType:
                        Console.WriteLine("String:  " + packet.ReadString());
                        break;
                    default:
                        break;
                }
            }
            break;
        }
    }
    Console.Read();
    
    ' Change the locale ID to correspond to your installation of Visual Studio.
    Dim dsmgr As New DatastoreManager(1033)
    Dim platform As Platform = GetPlatformByName("Windows Mobile 5.0 Smartphone SDK", dsmgr)
    Dim emulator As Device = platform.GetDevice(platform.GetDefaultDeviceId())
    emulator.Connect()
    ' Add the GUID of your package below.
    Dim ra As RemoteAgent = emulator.GetRemoteAgent(New ObjectId(""))
    ra.Start("command line argument")
    Dim ps As DevicePacketStream = ra.CreatePacketStream(New ObjectId("A92866CA-AE83-4848-9438-501D8DB3CF25"))
    Dim packet As Packet
    packet = New Packet()
    While ps.IsConnected()
        If ps.IsPacketAvailable() Then
            packet = ps.Read()
            While Not packet.IsEndOfPacket()
                Select Case packet.ReadDataType()
                    Case DataType.Int32Type
                        Console.WriteLine("Int32Type:  " + packet.ReadInt32().ToString())
                    Case DataType.StringType
                        Console.WriteLine("String:  " + packet.ReadString())
                    Case Else
                End Select
            End While
            Exit While
        End If
    End While
    Console.Read()
    

    Über den vorangehenden Code wird eine Verbindung mit einem Windows Mobile 5.0-Emulator hergestellt und der Remote-Agent für das Gerät bereitgestellt. Anschließend werden eine Verbindung mit dem Gerät hergestellt und Paketdaten gelesen. Die vom Gerät gelesenen Informationen werden in der Konsole angezeigt.

  15. Fügen Sie emulator.GetRemoteAgent(new ObjectId("")) die ID des Pakets hinzu.

    Beispiel: emulator.GetRemoteAgent(new ObjectId("F85E57BA-5AE9-4FF7-8433-6AB7D991D034")).

  16. Fügen Sie die folgende Hilfsmethode unter der Main-Methode ein:

    // Return a platform if the supplied name can be found in the datastore.  
    // Return null pointer if platform cannot be found.
    private static Platform GetPlatformByName(string p, DatastoreManager dsmgr)
    {
        // Get all platforms in the datastore.
        Collection<Platform> platforms = dsmgr.GetPlatforms();
    
        // Find the platform whose name matches the parameter.
        foreach (Platform platform in platforms)
        {
            if (platform.Name == p) return platform;
        }
        return null;
    }
    
    ' Return a platform if the supplied name can be found in the datastore.  
    ' Return null pointer if platform cannot be found.
    Private Function GetPlatformByName(ByVal p As String, ByVal dsmgr As DatastoreManager) As Platform 
        ' Get all platforms in the datastore.
        Dim platforms As Collection(Of Platform) = dsmgr.GetPlatforms()
    
        ' Find the platform whose name matches the parameter.
        Dim platform As Platform
        For Each platform In  platforms
            If platform.Name = p Then
                Return platform
            End If
        Next platform
        Return Nothing
    
    End Function 'GetPlatformByName
    
  17. Drücken Sie F5, um das DesktopSide-Projekt zu debuggen.

    DesktopSide stellt eine Verbindung her und startet den Emulator, falls er noch nicht gestartet wurde. Dann wird das Paket bereitgestellt und die DeviceAgent-Anwendung gestartet. Anschließend werden Paketinformationen von DesktopSide und DeviceAgent ausgetauscht und dem Benutzer angezeigt.

Siehe auch

Konzepte

Steuern von Geräten über die Smart Device Connectivity-API

Übersicht über Add-On-Pakete

Weitere Ressourcen

Referenz zur Device Connectivity-API für intelligente Geräte

Smart Device Connectivity API Samples