Копирование файлов с устройства Windows Mobile /Windows 7

Я написал очень простое приложение Inventory Tracking для мобильного устройства Motorola MC3190. Мне нужно передавать данные на устройство и с него и на ПК с Windows 7.

Я искал в Интернете варианты того, как это сделать, но пока ничего не получалось. Я очень новичок в разработке мобильных приложений и имею ограниченные знания C#. (Достаточно просто, чтобы разработать простое приложение для сбора данных).

Я загрузил и установил Центр устройств Windows Mobile, Windows Mobile 6 SDK и OpenNETCF Smart Device Framework, чтобы получить доступ к RAPI. Я знаю, что удаленное устройство правильно подключено через Центр устройств Windows Mobile, и VS2008 может развернуть мое решение на устройстве. Я также могу копировать файлы туда и обратно вручную через Центр устройств Windows Mobile.

Что я пробовал до сих пор:

Добавить ссылку OpenNetCF.Desktop.Communications

Используемый код следующим образом:

        using (RAPI rapi = new RAPI())  <--- Error Occurs (Cannot Find PInvoke.dll in RAPI.dll)
        {

            rapi.Connect(true);

            rapi.CopyFileToDevice(remote_file, local_file);

            rapi.Disconnect();

        }

Я получаю сообщение об ошибке (не удается найти PInvoke.dll в RAPI.dll) при создании нового экземпляра RAPI, поскольку он пытается использовать ActiveSync. Я не могу загрузить ActiveSync, потому что я использую Windows 7.

Я попытался добавить следующий код:

    [DllImport("rapi.dll")]
    static extern int CeRapiInit();

а потом звонит

        var rapi = CeRapiInit() == ERROR_SUCCESS;  <-- Return Value is -2147024770

        if (!rapi)
            return;

        try
        {
          .. Somestuff
        }
        finally
        {
            CeRapiUninit();
        }

Похоже, что RAPI не может найти удаленное устройство. Я рассмотрел некоторые параметры для функций pget и pput, но они также не подходят для вызова CeRapiInit. Возможно, я вообще не смогу использовать RAPI

Любая помощь будет оценена.

2 ответа

Если вы используете Windows Mobile 6.5, я предлагаю вам использовать RAPI2, и обертку, предоставляемую в codeplex здесь: https://rapi2.codeplex.com/

Я использовал это в прошлом, и это прекрасно. Здесь вы должны взглянуть на следующие методы:

CopyFileFromDevice
CopyFileToDevice

Их можно использовать быстро, как показано в документации:

using (RemoteDeviceManager r = new RemoteDeviceManager())
{
   using (RemoteDevice dev = r.Devices.FirstConnectedDevice)
   {
      if (dev == null)
         return;

      // Device information
      Console.WriteLine(dev.Name + ":" + dev.Platform);
      Console.WriteLine("Remaining power: {0}%", dev.PowerStatus.BatteryLifePercent);

      // Manipulate local and device files & directories
      string myDocs = dev.GetFolderPath(SpecialFolder.MyDocuments);
      string deviceFile = myDocs + @"\Test.txt";
      string localFile = System.IO.Path.GetTempFileName();
      System.IO.File.WriteAllText(localFile, "Testing. 1. 2. 3.");

      RemoteFile.CopyFileToDevice(dev, localFile, deviceFile, true);
      RemoteFile.CopyFileFromDevice(dev, myDocs + @"\Test.txt", localFile, true);
   }
}

Код ошибки -2147024770 означает "Модуль не найден", это не значит, что устройство не найдено.

Использование RAPI не будет проблемой. ActiveSync и WMDC - два термина для одного и того же.

Я использую приложение C/C++ с использованием AS/WMDC на своем компьютере с Win7 x64: http://www.hjgode.de/wp/2012/03/28/mobile-development-autohide-windows-mobile-device-center-2/

Я также начал с OpenNetCF.Desktop.Communication, но он вел себя плохо и поэтому перешел на C/C++.

Другие вопросы по тегам