Compartilhar via


Services.exe Migration

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

Este tópico fornece informações que é útil quando você migrar Serviços e aplicativos que usam serviços das versões anteriores do Windows Embedded CE Windows Embedded CE 6.0. O Services.exe foi reescrito e renomeado no CE 6.0 para o novo kernel, portanto, você deve ser cuidado quando você migrar seus serviços.

Migração do Services.exe para Windows incorporado CE 6.0

As seguinte informações é importante entender quando você migrar de um versão anterior de Windows Embedded CE a Windows Embedded CE 6.0.

  • Nas versões anteriores de Windows Embedded CE e em Windows Mobile 6, o nome desse processo era services.exe. Na atual versão do Windows Embedded CE, o nome desse processo é servicesd.exe.

  • CE 6.0, servicesd.exe é um processo que atua como um hospedar às DLLs serviço. Serviços que executar por um longo tempo e que não é necessário acesso direto para hardware ou funções kernel, such as a pilha TCP, devem ser hospedadas por servicesd.exe, em vez sendo hospedados em de kernel. Servicesd.exe fornece recursos carregamento aprimorada, such as suporte para iniciar, pausar e parar serviços. O processo services.exe, qual era o processo hospedar serviços DLLs prior to CE 6.0, agora somente atua como um intérprete linha de comando.

  • CE 6.0, IOCTL_SERVICE_CALLBACK_FUNCTIONS é Não com suporte mais.

  • Para o HKEY_LOCAL_MACHINE\Services\ <Nome do Serviço> subchave Registro, o antigo nomeado valor Contexto nunca deve ser definida; Se ela for definida, o serviço falhará para carregar. Para esta subchave, a seguinte nomeado valor é novo para CE 6.0:

    Valor : tipo Descrição

    ServiceContext : REG_DWORD

    Valor inicial passada para rotina de inicialização.

  • Para o HKEY_LOCAL_MACHINE\Services\ <Nome do Serviço> subchave Registro, o Sinalizadores nomeado valor tem uma opção adicional:

    DEVFLAGS_NOUNLOAD (0x00000020) Do not allow the service to be unloaded.
    
  • Para descarregar um serviço em CE 6.0, você pode usar o seguinte exemplo codificar. Este codificar descarrega completamente o serviço DLL de hospedar o serviço, a menos que o serviço tenha o sinalizador DEVFLAGS_NOUNLOAD definido. Quando este sinalizador estiver definido, tentativas para descarregar o serviço usando DeregisterService falhará. Para recarregar um serviço descarregado, você deve chamar ActivateService.
    No seguinte exemplo codificar, szServicePrefix Será um prefixo serviço na forma “ HTP0: ” Como um exemplo.

    HANDLE h = CreateFile(szServicePrefix,GENERIC_READ|GENERIC_WRITE,0,
                              NULL,OPEN_EXISTING,0,NULL);
    
        if (h == INVALID_HANDLE_VALUE) {
            return 0;
        }
    
        DEVMGR_DEVICE_INFORMATION devInfo;
        devInfo.dwSize = sizeof(devInfo);
    
        if (! GetDeviceInformationByFileHandle(h,&devInfo)) {
            CloseHandle(h);
            return 0;
        }
    
        // Must close handle before unloading so there's no open references.
        CloseHandle(h);
    
        if (! DeregisterService(devInfo.hDevice)) {
            return 0;
        }
    

Migração do Services.exe para serviços no CE 6.0

As seguinte informações é importante entender quando você migrar um serviço gravado para um versão anterior de Windows Embedded CE Windows Embedded CE 6.0.

  • Modelo de memória virtual para Windows Embedded CE foi alterado. Anteriormente, cada aplicativo era limitado a um espaço de endereço virtual 32 megabyte. Na atual versão, cada aplicativo tem um espaço de endereço virtual 4 gigabyte. Devido a isso, os serviços não é diretamente ponteiros acessar ao processamento um chamar PSL, como faziam anteriormente. Para obter mais informações sobre migração um driver, consulte Migrating a Windows Embedded CE Driver to Windows Embedded CE 6.0.
  • Anteriormente, o processo que foi nomeado services.exe atua como dois a hospedar para serviço DLLs, quando foi a primeira instância services.exe criada em um sistema e um linha de comando interpretador que habilitado operações em serviços, como interromper um serviço, iniciar um serviço, e assim por diante. Em CE 6.0, o processo que hospeda as DLLs serviço agora está nomeado servicesd.exe. Atualmente, o processo services.exe somente atua como um linha de comando interpretador.
  • Para o HKEY_LOCAL_MACHINE\Services\ <Nome do Serviço> subchave Registro, o Contexto valor do Registro para DLLs serviço não deve ser usado. Quando você definir Contexto Para um valor non-zero, servicesd.exe não irá carregar seu serviço. Para configurar as opções, como SERVICE_INIT_STOPPED (0 x 00000001), você deve definir a ServiceContext valor do Registro, não o Contexto valor do Registro.
  • Você pode não criar instância mais um adicional, Limited-Functionality copiar do Services.exe para hospedar um serviço em seu próprio espaço processo. Essa funcionalidade estava anteriormente habilitado usando o sinalizador SERVICE_INIT_STANDALONE Context.
  • Nas versões anteriores de Windows Embedded CE, de linha de comando de serviços, um usuário poderia tipo um comando such as Comando serviços < servicePrefix > Arg1 Arg2 Arg3… e, em seguida, os argumentos foram passados para o serviço especificado pelo IOCTL_SERVICE_COMMAND_LINE_PARAMS. Essa funcionalidade é Não com suporte mais em CE 6.0.
  • Nas versões anteriores do Windows Embedded CE, Services.exe consultado um serviço com IOCTL_SERVICE_QUERY_CAN_DEINIT antes de descarregar o serviço. O serviço pode indicar que ela não desejar para ser descarregado usando esse mecanismo. Essa funcionalidade é Não com suporte mais. Na atual versão, um serviço pode indicar que ele não deve ser descarregado pela configuração de Sinalizadores valor do Registro para DEVFLAGS_NOUNLOAD.

Migração do Services.exe para aplicativos em CE 6.0

As seguinte informações é importante entender quando você migrar aplicativos de um versão anterior de Windows Embedded CE que interagir com um serviço DLL no mesmo dispositivo Windows Embedded CE ativado.

  • Os aplicativos podem ser registrados por meio de chave Registro HKEY_LOCAL_MACHINE\Init a serem iniciadas antecipado quando um dispositivo é inicializado. Nas versões anteriores do Windows Embedded CE, esses aplicativos pode especificar a não ser iniciado até Services.exe tinha concluída inicialização. Na atual versão, aplicativos devem indicar a aguardar até que servicesStart.exe Foi concluída inicialização. ServicesStart.exe não serão sinal para o kernel para iniciar aplicativos aguardando nele até que todos os serviços foram carregados, que é exatamente o Services.exe fez anteriormente.
  • O GetServiceHandle e ServiceIoControl funções tem sido substituído desde Windows CE 5.0. Quando um aplicativo chama essas funções na atual versão, as funções serão manipuladas por CreateFile e DeviceIoControl em ordem para manter compatibilidade de aplicativos. Observe que há alterações da forma que o serviço é chamado quando isso ocorre. Anteriormente, GetServiceHandle Seria não chamar o xxx_Open função do serviço; na atual versão do Windows Embedded CE, ele faz chamar essa função. Na atual versão, o identificador retornado por GetServiceHandle deve ser fechado com CloseHandle, que não era exigido em versões anteriores.
  • GetServiceHandle Não há mais recupera os campos para szDllName e pdwDllBuf.
  • Quando um aplicativo chama ServiceEnumInfo, o identificador serviço não é retornado na hServiceHandle membro de ServiceEnumInfo. Este campo é agora sempre NULL.
  • O RegisterService função foi removida.
  • Na atual versão do Windows Embedded CE, a função ServiceAddPort no longer persiste valores Registro super-Services usando o szRegWritePath valor. Se um aplicativo quer alterações chave do Registro super-Services, ele deve manualmente gravar esses valores no Registro.

Para obter informações gerais migração, consulte Migrating from an Earlier Version of Windows Embedded CE.

Observação

O link Send Feedback não está disponível ao exibir esta documentação emMSDN Online.

See Also

Other Resources

Services.exe