Compartilhar via


ActiveSync Programming FAQ

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

P: Como Gerenciador ActiveSync identifica o área de trabalho novo objeto criado com dados a partir de dispositivo Windows_Embedded_CE-based?

R: A implementação de IReplObjHandler::SetPacket deve criar um novo identificador HREPLITEM e defini-la no membro de hItem da REPLSETUP estrutura passado a IReplObjHandler::Setup chamar. Normalmente, o provedor ActiveSync salva o ponteiro para REPLSETUP Durante a IReplObjHandler::Setup chamar.

Observe que de leitura e gravação para o armazenar podem levar local no tempo a mesmo; Duas chamadas possam ser feitas para IReplObjHandler::Setup Antes uma IReplObjHandler::Reset chamar. Chamar um para IReplObjHandler::Setup Pode ser para leitura e chamar outro pode ser para gravação. O provedor ActiveSync deve, portanto, manter dois ponteiros para REPLSETUP Em sua implementação de IReplObjHandler::Setup.

P: Como Gerenciador ActiveSync identifica o novo objeto dispositivo que é criado com os dados a partir de área de trabalho?

R: A implementação de IReplObjHandler::SetPacket No Windows Embedded CE baseado dispositivo deve atribuir o objeto identificação do novo objeto para REPLSETUP::oidNew. Essa identificação é enviada para o área de trabalho e Gerenciador ActiveSync mantém seu mapeamento com o área de trabalho objeto.

P: Como fazer você resolver conflitos sem exibir a caixa diálogo resolução estar em conflito com?

R: IReplStore::GetConflictInfo pode retornar códigos de erro especial. Consulte a seção Resolvendo conflitos para obter detalhes.

P: Uma alteração no dispositivo Windows_Embedded_CE-based, na verdade, talvez uma exclusão no área de trabalho. Como pode isso ser implementado?

R: IReplObjHandler::SetPacket pode retornar códigos de erro especial. Consulte a seção Enviando e recebendo alterado objetos para obter detalhes.

P: Como pode o Gerenciador ActiveSync saber sobre área de trabalho-armazenar alterações em tempo real?

R: O usuário pode modificar o área de trabalho armazenar enquanto o Windows Embedded CE com dispositivo está conectado. De exemplo, no exemplo de StockPor, o usuário pode substituir o arquivo de dados com outro arquivo que contém dados diferentes. Nessa situação, prompt o usuário para fazer um Combine/Replace porque o novo armazenar no longer mapeia para qualquer objeto sobre o Windows Embedded CE com dispositivo. Isso pode ser implementado em IReplStore::IsFolderChanged Retornando RERR_STORE_REPLACED.

P: É possível ler a partir e gravação para o área de trabalho armazenar no mesmo tempo?

R: Sim. Um provedor ActiveSync deve manter dois ponteiros apontando para diferentes REPLSETUP estruturas. No entanto, somente um objeto pode ser ler e um objeto escrito no mesmo tempo. Portanto, não é nenhum problema com múltiplo lê ou grava múltiplo.

P: Como fazer você evitar um objeto de sendo marcadas como alterado após ela é gravada para o área de trabalho armazenar as a result of sincronização?

R: Após um Windows Embedded CEbaseado objeto dispositivo é gravado para o área de trabalho armazenar, chamadas Gerenciador ActiveSync IReplStore::UpdateItem. O provedor ActiveSync deve aberto o objeto e atualização a determinada identificador HREPLITEM com que ele usa na IReplStore::IsItemChanged — geralmente uma atual tempo carimbo ou alteração número. Isso impede que o objeto sendo marcadas novamente como alterado no área de trabalho.

P: Que se um área de trabalho o objeto é alterado novamente logo depois que ele for sincronizado?

R: Quando um objeto é enviado para o Windows Embedded CE- baseado no dispositivo, o aguarda para confirmação a partir de ActiveSync Windows Embedded CE Gerenciador - com base em dispositivo que este objeto foi com êxito sincronizado antes Ele limpa a marca indicando que o área de trabalho objeto é alterado. Se o Windows Embedded CE baseado dispositivo tem problemas gravar o objeto, a sincronização pode ser tentada novamente no próximo a sincronização ciclo.

Se um objeto for alterado novamente para confirmação chega, o Gerenciador ActiveSync deve manter o objeto "sujo". Isso é implementado em IReplStore::IsItemChanged. O último parâmetro passado será NULL neste maiúsculas e minúsculas, e ActiveSync provedor deve aberto o atual objeto e compare o carimbo tempo. Se o atual objeto tiver sido alterado novamente, o provedor deve retornar TRUE.

P: Se a sincronização definida por um provedor ActiveSync é relacionado para o atual data, como pode a regra ser reaplicada quando a data é alterada?

R: Se o Windows Embedded CE - com dispositivo está conectado e altera a data — talvez porque a meia-noite apenas passou ou o usuário alterou a data — todos os compromissos devem ser substituídos. Quando ocorre uma alteração de data, o Gerenciador ActiveSync chama IReplStore::ReportStatus Com RSC_DATE_CHANGED para cada objeto. Um provedor ActiveSync geralmente redefine um sinalizador de bits na HREPLITEM determinado assim que quando IReplStore::IsItemReplicated é chamado later on o item, a regra serão reavaliados.

P: Como você desligar e reiniciar Gerenciador ActiveSync?

R: Executar /quit Wcesmgr.exe sai de Gerenciador ActiveSync normalmente. Executar /show Wcesmgr.exe reinicia a Gerenciador ActiveSync e torna a janela status ActiveSync visível. Executando Wcesmgr.exe sem um desses linha de comando Opções inicia Gerenciador sem exibir a janela status ActiveSync ActiveSync.

O método recomendado para determinar o caminho executável é a pesquisa para a chave Registro Wcesmgr.exe em Caminho HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App. Se ele estiver presente, ele conterá o caminho completo para o Gerenciador ActiveSync. Se ele não estiver presente, o aplicativo deve pesquisa para Wcesmgr.exe. Isso falhar assim, o aplicativo deve usar como padrão usar o SyncMgr.exe mais antigos.

A seguinte tabela mostra as opções linha de comando para Wcesmgr.exe. More than um parâmetro pode ser usado. Você pode modificar o comportamento do Gerenciador mesmo quando ele for execução por chamado Wcesmgr.exe novamente com parâmetros novos ou diferentes.

Parâmetro Description

/ encerrar

Desligar Gerenciador ActiveSync mantendo a conexão ativo. Isso é útil para depuração porque todos os módulos ActiveSync será descarregados. Os módulos são recarregados quando você executar Wcesmgr.exe novamente; Portanto, você não precisará fisicamente desconectar e reconectar o Windows Embedded CE com dispositivo.

/show

Inicie ActiveSync Gerenciador se necessário e tornar a janela status ActiveSync visível.

/synconcon

[Esta linha de comando parâmetro é Não com suporte mais.]

/SyncMgr

Início ActiveSync Gerenciador se necessário e exibir o ActiveSync Options caixa diálogo.

/syncnow

Inicie ActiveSync Gerenciador se necessário e sincronizar dados imediatamente.

P: Em de programa de instalação que instala módulos ActiveSync, como pode desligar Gerenciador ActiveSync para que ela não carrega os módulos?

R: Quando você estiver instalando ou atualizar seus módulos ActiveSync , ele pode ser necessário desligar o Gerenciador ActiveSync para que o programa instalação pode substituir os módulos com as atualizações. Você pode desligar Gerenciador ActiveSync pela execução "/quit Wcesmgr.exe". Você Gerenciador ActiveSync reiniciar pela execução ambos /show Wcesmgr.exe, que exibe a janela status ActiveSync ou Wcesmgr.exe com um opção de linha de comando, que mantém a janela status ocultada.

P: Por que é o botão Opções, na caixa de diálogo ActiveSync Options, desativado para um dispositivo desconectado Windows_Embedded_CE-based?

R: Um comum Erro implementação é permitir IReplStore::GetStoreInfo retornar qualquer código de erro quando IReplStore::Initialize ainda não tiver sido chamado. A abordagem correta é retornar NOERROR imediatamente após cada membro em STOREINFO, a menos que a armazenar identificação seja definida. Um provedor ActiveSync geralmente define um sinalizador em IReplStore::Initialize e verifica esse sinalizador no IReplStore::GetStoreInfo.

P: Se o provedor ActiveSync oferecer suporte a notificação em tempo real, porque são objetos não mostrados como alterados ou excluídos na janela de status ActiveSync direito após conexão?

R: Você pode ter implementado IReplStore::IsFolderChanged Para sempre definir *pfChanged FALSE. Você deve defini-la como * pfChanged quando IReplStore::IsFolderChanged é chamado Primeiro tempo. Para obter informações mais detalhadas, consulte Enumerando objetos.

P: Se o provedor ActiveSync não notificação suporte em tempo real, como podem alterações e exclusões de objetos ser detectados?

R: As alterações e exclusões são detectadas pelo enumerando todos os objetos de armazenar e verificar cada um para ver se ele foi alterado. Objetos que aparecem na lista persistente e não são enumerados são considerados foram excluídas.

Esse processo de verificação pode ser iniciado antes sincronização, ou em um intervalo tempo especificado. O intervalo é definido no microssegundos em STOREINFO::uTimerRes. Verificando usa os mesmos recursos como o aplicativo e, portanto, não pode ser iniciada se o aplicativo está ocupado. Para get resolver isso, um provedor ActiveSync pode definir STOREINFO::uTimerRes para 0. Então, sempre que a janela status ActiveSync recebe foco, such as quando o usuário clica nele, ele é razoável assumir que o aplicativo usando os dados é pode não ocupado e o Gerenciador ActiveSync iniciar a enumeração.

P: O usuário exclui um objeto sobre o dispositivo Windows_Embedded_CE-Based e, em seguida, exclui o correspondente área de trabalho objeto. Por que o objeto manter mostrando como Desatualizado?

R: Pode haver uma situação incomum onde enquanto um Windows Embedded CE- com dispositivo está conectado, não é possível Gerenciador ActiveSync detecção a exclusão. O provedor ActiveSync deve implementar IReplStore::IsValidObject Para verificar o objeto representadas pelo identificador especificado e se o objeto deixa de existir, retornar RERR_OBJECT_DELETED. Ele também pode retornar RERR_CORRUPT para indicar um incorreto identificador que não representa qualquer objeto at all.

P: IReplStore::RemoveDuplicates é chamado e a remove provedor ActiveSync alguns objetos a partir de área de trabalho armazenar. Como pode RemoveDuplicates solicitação de ActiveSync Gerenciador para sincronização reiniciar para escolher até essas exclusões?

R: Retornar RERR_RESTART in IReplStore::RemoveDuplicates Faz com que o Gerenciador ActiveSync para iniciar o processo sincronização novamente. Retornar quaisquer outros código de erro Causa ActiveSync Gerenciador para chamar IReplStore::RemoveDuplicates novamente após a conclusão do próximo sincronização.

P: Como fazer você evitar o Gerenciador ActiveSync exibam o padrão " inicialização do serviço sincronização %s não foi bem-sucedido. Erro: %X." caixa mensagem?

R: Se um provedor ActiveSync retornará um erro em IReplStore::Initialize, a caixa mensagem de erro é exibida com a código de erro. Se o provedor ActiveSync solicita que o erro sozinho e não desejar a Gerenciador ActiveSync para exibir uma caixa mensagem, ela deve retornar RERR_NO_ERR_PROPMT in IReplStore::Initialize.

P: Como você sinal que a última ou apenas pacote foi ler ao ler um objeto?

R: Return RWRN_LAST_PACKET in IReplObjHandler::GetPacket.

P: Como um provedor ActiveSync sabe quando sincronização foi iniciado ou finalizado?

R: IReplStore::ReportStatus Com RSC_BEGIN_SYNC é chamado quando inicia sincronização. É chamado com RSC_END_SYNC quando termina sincronização.

P: Como um provedor ActiveSync sabe quando de backup ou restaurar foi iniciado ou finalizado?

R: IReplStore::ReportStatus Com RSC_BEGIN_BACKUP é chamado quando inicia um de backup. É chamado com RSC_END_BACKUP quando termina um de backup.

ReplStore::ReportStatus Com RSC_BEGIN_RESTORE é chamado quando um restaurar é iniciado. É chamado com RSC_END_RESTORE quando termina uma restaurar.

P: Como fazer você get a código de erro quando um objeto não consegue ser gravada ou excluído no dispositivo Windows_Embedded_CE-based?

R: IReplStore::ReportStatus Com RSC_WRITE_OBJ_FAILED é chamado após um objeto falha ao ser gravado o Windows Embedded CE com dispositivo. É chamado com RSC_DELETE_OBJ_FAILED quando o objeto não pode ser excluído. Em ambos os casos, uParam é a código de erro HRESULT.

P: Como um provedor ActiveSync sabe se ele está lidando com uma conectada ou um dispositivo Windows_Embedded_CE-Based selecionado?

R: Ele pode chamar CeGetDeviceId, uma função que é exportada do Ceutil.dll. Se o dispositivo identificação retornada é 0, a Windows Embedded CE - com dispositivo não está conectado.

P: Como fazer você get a chave Registro onde opções para um provedor ActiveSync podem ser salvas?

R: Chamar IReplNotify::QueryDevice (QDC_SEL_DEVICE_KEY, & hKey).

P: Como fazer você get o nome Windows_Embedded_CE-Based dispositivo?

R: Chamar IReplNotify::QueryDevice (QDC_SEL_DEVICE, & devInfo). DEVINFO::szName é o nome do Windows Embedded CE com dispositivo.

P: O que faz o área de trabalho ActiveSync provedor precisa fazer a sincronização suporte com múltiplo dispositivos Windows incorporados baseado em CE?

R: Não muito. O Gerenciador ActiveSync automaticamente gerencia os mapeamentos diferentes com diferentes Windows Embedded CE-com os dispositivos. Ela certifica que o arquivo correto ActiveSync é carregado para a correta Windows Embedded CE com dispositivo. Tudo o provedor ActiveSync precisa fazer é verificar que quaisquer dados Device-specific ou configurações que ele usa e dos quais o Gerenciador ActiveSync não tem nenhum conhecimento é salva na pasta Device-specific chave do Registro ou arquivo. É a pasta arquivo Device-specific DEVINFO::szPath, retornado por IReplNotify::QueryDevice (QDC_SEL_DEVICE, & devInfo). É a chave Registro Device-specific hKey, retornado por IReplNotify::QueryDevice (QDC_SEL_DEVICE_KEY, & hKey).

P: O que faz o dispositivo ActiveSync provedor precisa fazer a sincronização suporte com área de trabalho dois computadores?

R: O provedor ActiveSync dispositivo deve salvar a uPartnerBit que é passado para InitObjType e usá-lo para definir ou redefinir sujo bits de um sincronizado objeto.

P: O contagem de referência de IReplStore nunca atingir zero, e o provedor não pode ser liberada em IReplStore::Release. Por que?

R: O provedor ActiveSync talvez tenha outra parte mantendo sua referência e, da Gerenciador ActiveSync assim, é que libera a armazenar, embora ele deve ser o um último para fazê-lo não última.

P: Em IReplObjHandler::SetPacket, como o área de trabalho ActiveSync provedor saber se Ele é um novo objeto ou não?

R: RSF_NEW_OBJECT será definida no REPLSETUP::dwFlags Fornecido na IReplObjHandler::Setup chamar.

P: Em IReplObjHandler::SetPacket, como faz o provedor ActiveSync dispositivo saber se ele é um novo objeto?

R: Ele pode chamar CeGetOidInfo Com REPLSETUP::OID, que sempre falhará em novos objetos dispositivo.

P: Durante IReplObjHandler::SetPacket no área de trabalho, um objeto diferente pode ser alterado ou criado. Como você pode dizer o Gerenciador ActiveSync para sincronizar novamente so that esse objeto é capturado?

R: De exemplo, ao usuário é escrever um novo contato com um aniversário para o área de trabalho armazenar, um compromisso recorrente pode ser automaticamente criado. Se o provedor ActiveSync oferecer suporte a notificação em tempo real, essa alteração deve ser separada backup automaticamente. Caso contrário, o provedor ActiveSync precisa chamar IReplNotify::OnItemNotify Com o ProgID da armazenar e tipo de objeto do objeto alterado ou novo. O HREPLITEM pode ser passado como NULL.

P: Quando o provedor ActiveSync dispositivo está para ser finalizada, como pode ele dizer a Gerenciador ActiveSync para tentar novamente mais tarde?

R: Se o provedor ActiveSync não é possível finalizar próprio imediatamente, ele poderá retornar FALSE quando InitObjType (NULL, NULL, 0) é chamado. O Gerenciador ActiveSync tentará finalizar o provedor novamente em dois segundos e continuar isso para up to 15 minutes. Isso é necessário para alguns provedores ActiveSync que devem sinal e esperar por um segmento de trabalho para finalizar.

P: Se o provedor ActiveSync oferecer suporte a sincronização de múltiplo tipos objeto, como IReplStore::Initialize saber quais tipos objeto habilitado para que ele não desperdice tempo em Desativado tipos objeto?

R: Antes de ele chama IReplStore::Initialize, ActiveSync chamadas IReplStore::ReportStatus Com RSC_OBJ_TYPE_ENABLED uma vez para cada habilitado tipo objeto e RSC_OBJ_TYPE_DISABLED uma vez para cada tipo objeto desativados. The HREPLFLD passado para IReplStore::ReportStatus é realmente um ponteiro para o Nome tipo objeto.

P: O provedor CE File ActiveSync oferece suporte volumes montados, tais como fichas de estudo?

R: Não no tempo de presente.

Applies to Windows Mobile 6 AKU 1.3

P: Por que ActiveSync travar durante a conexão entre um dispositivo e um PC by means of um cabo USB?

R: ActiveSync exige que a versão plataforma seja configurado corretamente. Se ele não está configurado corretamente e o dispositivo está conectado a um PC by means of um cabo USB, ActiveSync tentativas de conexão, mas nunca termina, essencialmente "girando" continuamente até que o cabo USB é desconectado fisicamente.

Para evitar ou resolver esta emitir, implementar SPI_GETPLATFORMVERSION corretamente.

Para obter mais informações sobre como implementar SPI_GETPLATFORMVERSION, consulte Implementation of the SPI_GETPLATFORMVERSION IOCTL.

See Also

Other Resources