Share via


Procedura dettagliata: scambio di dati tra applicazioni desktop e applicazioni per dispositivi

Aggiornamento: novembre 2007

In questa procedura dettagliata verranno creati un'applicazione agente di dispositivo, un'applicazione desktop e un package aggiuntivo nell'archivio dati. L'applicazione desktop distribuirà e avvierà l'agente di dispositivo, a seconda delle informazioni nel package aggiuntivo. L'applicazione desktop scambierà quindi dati di pacchetto con l'applicazione agente di dispositivo e verrà chiusa. Verranno completate le seguenti attività:

  • Creazione di un'applicazione agente di dispositivo gestita.

  • Creazione di un package aggiuntivo per l'applicazione agente di dispositivo.

  • Creazione di un'applicazione desktop che avvia il package e comunica con l'agente di dispositivo.

Nota:

Nel computer in uso è possibile che vengano visualizzati nomi o percorsi diversi per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per ulteriori informazioni vedere Impostazioni di Visual Studio.

Creazione di un'applicazione agente di dispositivo

Per creare un'applicazione agente di dispositivo

  1. Avviare Visual Studio.

  2. Scegliere Nuovo dal menu File, quindi Progetto.

    Verrà visualizzata la finestra di dialogo Nuovo progetto.

  3. (Visual C#) Espandere Visual C# e quindi fare clic su Smart Device. Assegnare al progetto il nome DeviceAgent e alla soluzione il nome DataExchange. Scegliere OK.

    (Visual Basic) Espandere Visual Basic e quindi fare clic su Smart Device. Assegnare al progetto il nome DeviceAgent e alla soluzione il nome DataExchange. Scegliere OK.

    Verrà visualizzata la finestra di dialogo Aggiungi nuovo progetto Smart Device.

  4. Selezionare Windows Mobile 5.0 Smartphone SDK per la piattaforma di destinazione, fare clic su Applicazione console nel riquadro Modelli e quindi fare clic su OK.

    Il nuovo progetto DeviceSample verrà visualizzato in Esplora soluzioni.

  5. (Visual C#) In Esplora soluzioni fare clic con il pulsante destro del mouse su Riferimenti, quindi scegliere Aggiungi riferimento.

    (Visual Basic) In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto DeviceAgent, quindi scegliere Aggiungi riferimento.

    Verrà visualizzata la finestra di dialogo Aggiungi riferimento.

  6. Fare clic sulla scheda Sfoglia e spostarsi su unità:\Programmi\File comuni\Microsoft Shared\CoreCon\1.0\Target\Lib. Fare clic su Microsoft.Smartdevice.DeviceAgentTransport.dll e quindi su OK.

    Un riferimento a Microsoft.Smartdevice.DeviceAgentTransport è stato aggiunto al progetto.

  7. Fare doppio clic su Program.cs (C#) o Module1.vb (Visual Basic) in Esplora soluzioni per aprire il file nell'editor del codice, se non è già aperto.

  8. Posizionare il cursore all'inizio del file.

  9. Inserire il codice seguente:

    using Microsoft.SmartDevice.DeviceAgentTransport;
    
    Imports Microsoft.SmartDevice.DeviceAgentTransport
    
  10. Posizionare il cursore all'interno del metodo Main.

  11. Inserire il codice seguente:

    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)
    

    Il codice precedente crea un oggetto IDeviceAgentTransport e quindi accetta una connessione dal computer desktop. Il programma invia un pacchetto al computer desktop che contiene le informazioni sulla versione di .NET Compact Framework.

  12. Scegliere Compila soluzione dal menu Compila.

    È ora disponibile un'applicazione Smart Device denominata DeviceAgent. La distribuzione dell'applicazione al dispositivo verrà eseguita successivamente.

Creazione di un package aggiuntivo nell'archivio dati.

Per creare un package aggiuntivo nell'archivio dati

  1. Avviare il Blocco note.

  2. Copiare quanto segue in un file del Blocco note:

    <?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. In Visual Studio scegliere Crea GUID dal menu Strumenti.

    Verrà visualizzata la finestra di dialogo Crea GUID.

  4. Selezionare Formato registro, fare clic su Copia e quindi su Esci.

  5. Incollare il GUID nel Blocco note nell'attributo ID del tag Package e rimuovere le parentesi che lo racchiudono.

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

  6. Modificare il valore del tag <PROPERTY ID="RootPath" Protected="True"> nella cartella in cui si trova DeviceAgent.exe.

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

    Nota:

    Per determinare il percorso di DeviceAgent.exe, fare clic con il pulsante destro del mouse sul progetto DeviceAgent in Esplora soluzioni e quindi fare clic su Proprietà. Fare clic sulla scheda Compila e quindi su Sfoglia accanto a Percorso output.

  7. Copiare la libreria unità:\Programmi\File comuni\Microsoft Shared\CoreCon\1.0\Target\wce400\armv4i\DeviceAgentTransport.dll nel percorso specificato sotto il percorso radice.

    Nota:

    Questo passaggio è importante perché l'assembly Microsoft.Smartdevice.DeviceAgentTransport.dll utilizza la libreria DeviceAgentTransport.dll. Entrambi i file devono essere distribuiti con l'applicazione.

  8. Salvare il file nel Blocco note.

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

    \Documents and Settings\All Users\Dati applicazioni\Microsoft\corecon\1.0\addons\package.xsl (Altro)

    Nota:

    Se il nome del file package.xls è stato già utilizzato, scegliere un altro nome. Il nome del file non è importante perché tutti i file nella cartella vengono elaborati come package aggiuntivi.

  9. Uscire e riavviare Visual Studio.

    La cartella di package aggiuntivi viene caricata in Visual Studio all'avvio. Se Visual Studio si avvia correttamente, il package è privo di errori di sintassi.

    Archivio dati contiene ora un package aggiuntivo denominato DeviceAgent e un ID generato in modo univoco da Visual Studio. Quando il package viene distribuito, l'API di connettività Smart Device copierà tre file dalla cartella di output del progetto DeviceAgent nella directory unità\Programmi\DeviceAgent. DeviceAgent.exe verrà quindi eseguito nel dispositivo.

Creazione di un'applicazione desktop che distribuisce il package e comunica con l'agente di dispositivo

Per creare un'applicazione desktop che distribuisce il package e comunica con l'agente di dispositivo

  1. In Visual Studio scegliere Apri dal menu File, quindi fare clic su Progetto/Soluzione.

    Verrà visualizzata la finestra di dialogo Apri progetto.

  2. Spostarsi alla soluzione DataExchange.sln, fare clic su di essa e quindi su Apri.

    In Esplora soluzioni verrà visualizzata l'applicazione DeviceAgent.

  3. Scegliere Aggiungi dal menu File, quindi Nuovo progetto.

    Verrà visualizzata la finestra di dialogo Nuovo progetto.

  4. (Visual C#) Espandere Visual C# e quindi fare clic su Windows.

    (Visual Basic) Espandere Visual Basic e quindi fare clic su Windows.

  5. Nel riquadro Modelli fare clic su Applicazione console.

  6. Assegnare al progetto il nome DesktopSide, quindi scegliere OK.

    Due progetti sono contenuti in Esplora soluzioni: DeviceAgent e DesktopSide.

  7. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto DesktopSide quindi scegliere Imposta come progetto di avvio.

  8. (Visual C#) In Esplora soluzioni fare clic con il pulsante destro del mouse su Riferimenti nel progetto DesktopSide, quindi fare clic su Aggiungi riferimento.

    (Visual Basic) In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto DesktopSide, quindi scegliere Aggiungi riferimento.

    Verrà visualizzata la finestra di dialogo Aggiungi riferimento.

  9. Fare clic sulla scheda Sfoglia, spostarsi su unità:\Programmi\File comuni\Microsoft Shared\CoreCon\1.0\Bin, fare clic su Microsoft.Smartdevice.Connectivity.dll e quindi su OK.

    Un riferimento a Microsoft.Smartdevice.Connectivity è stato aggiunto al progetto DesktopSide.

  10. Fare doppio clic su Program.cs (C#) o Module1.vb (Visual Basic) nel progetto DesktopSide in Esplora soluzioni per aprire il file nell'editor del codice, se non è già aperto.

  11. Posizionare il cursore all'inizio del file.

  12. Inserire il codice seguente:

    using Microsoft.SmartDevice.Connectivity;
    using System.Collections.ObjectModel;
    
    Imports Microsoft.SmartDevice.Connectivity
    Imports System.Collections.ObjectModel
    
  13. Posizionare il cursore all'interno del metodo Main.

  14. Inserire il codice seguente:

    // 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()
    

    Il codice precedente si connette a un emulatore Windows Mobile 5.0 e distribuisce l'agente remoto al dispositivo, quindi stabilisce una connessione con il dispositivo e legge i dati del pacchetto. Le informazioni lette dal dispositivo vengono visualizzate nella console.

  15. Aggiungere l'ID del package a emulator.GetRemoteAgent(new ObjectId("")).

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

  16. Incollare il metodo di supporto seguente nel metodo Main:

    // 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. Premere F5 per eseguire il debug del progetto DesktopSide.

    DesktopSide si connette e avvia l'emulatore, se non è già avviato, quindi distribuisce il package e avvia l'applicazione DeviceAgent. DesktopSide e DeviceAgent si scambiano le informazioni del pacchetto e le visualizzano all'utente.

Vedere anche

Concetti

Controllo dei dispositivi mediante l'API di connettività per Smart Device

Cenni preliminari sui package aggiuntivi

Altre risorse

Riferimento all'API di connettività per Smart Device

Esempi di API di connettività Smart Device