Como mover, excluir ou copiar arquivos usando um caractere curinga em um serviço Windows com o Visual C++ .NET ou Visual C++ 2005

Traduções deste artigo Traduções deste artigo
ID do artigo: 829483 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo descreve como criar um projeto Windows Service com o Microsoft Visual C++ .NET 2003 ou Microsoft Visual C++ 2005 e, em seguida, como instalar o serviço do Windows. Este artigo também descreve como fornecer o serviço do Windows parâmetros de inicialização para um serviço do Windows e, em seguida, iniciar o serviço do Windows.

Este artigo também descreve como mover, copiar ou excluir arquivos de um diretório de acordo com os parâmetros de inicialização do serviço do Windows usando o controle Timer .


Requisitos

A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que você precisa:
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows XP Professional, Microsoft Windows XP Server ou Microsoft Windows Server 2003 com o Microsoft .NET Framework 1.1
  • Microsoft Visual Studio .NET 2003 Enterprise Edition ou o Microsoft Visual Studio .NET 2003 Enterprise Architect
Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
  • Serviço do Windows
  • Timers
Este artigo também pressupõe que a conta de usuário que você usa tenha as permissões que você deve ter para instalar o serviço do Windows e iniciar o serviço do Windows.


Criar um projeto Windows Service

Para criar um projeto Windows Service com Visual C++ .NET 2003 ou Visual C++ 2005, siga estas etapas:
  1. Inicie o Visual Studio .NET 2003 ou o Visual Studio 2005.
  2. No menu arquivo , aponte para novo e, em seguida, clique em Project .

    A caixa de diálogo New Project é exibida.
  3. Em Project Types , clique em Projetos do Visual c++ .

    Observação No Visual Studio 2005, clique em Visual C++ em Tipos de projeto .
  4. Em modelos , clique em Windows Service (. NET) .

    Observação No Visual Studio 2005, clique em Serviço do Windows em modelos .
  5. Na caixa de texto nome , digite FileHandling e, em seguida, clique em OK .

    O serviço do Windows FileHandlingWinService é criado e é aberto no design modo.
  6. Adicione um controle Timer para a janela Designer de serviço.
  7. Clique com o botão direito do mouse timer1 e, em seguida, clique em Propriedades .
  8. Na janela Propriedades, altere a propriedade Enabled como False .
  9. Clique duas vezes em timer1 na janela do Designer de serviço para exibir a janela de código.

    Isso cria um evento timer1_Elapsed e coloca o ponteiro na primeira linha do código do manipulador de eventos.
  10. Adicione o seguinte código dentro da definição de classe FileHandlingWinService antes do construtor:
    public:
            //Declare variables to hold the Windows Service start-up parameter values.
            String * FromDirectory;
            String * ToDirectory;
            String * WildCard;
            String * MoveCopyParam;
  11. As classes de manipulação de arquivo e as classes de manipulação de diretório residem no namespace System::IO. Para fazer referência ao namespace System::IO, adicione a linha de código a seguir na parte superior da janela código após as instruções using :
    using namespace System::IO;
  12. Adicione o seguinte código no OnStart() função dentro da definição de classe FileHandlingWinService :
    //Verify the number of arguments.
    Int32 i = args->Length;
    if (i >= 3)
    {
    	//Copy the Windows Service start-up arguments to the class variables.
        FromDirectory = (args[0]);
        ToDirectory = (args[1]);
        WildCard = (args[2]);
        //Copy the optional parameter.
        if (i == 4)
    		MoveCopyParam = (args[3]);
    	else
    		MoveCopyParam = S"";
        
        //Set the timer interval, enable the timer, and start the timer.
        timer1->Interval = 20000;
        timer1->Enabled = true;
        timer1->Start(); 
    }
    return;
  13. Adicione o seguinte código no OnStop() função dentro da definição de classe FileHandlingWinService :
    // Stop the timer.
    timer1->Stop();
  14. Adicione o seguinte código no manipulador de eventos timer1_Elapsed :
    // Verify the Windows Service start-up parameter values.
    if ( FromDirectory->Length !=0  && ToDirectory->Length !=0 && WildCard->Length !=0)
    {
        // Copy the destination (target) directory to a variable.
        String* path = ToDirectory ;
        try 
        {
            // Determine whether the destination directory exists.
            if (!Directory::Exists(path)) 
            {
                // Try to create the directory.
                DirectoryInfo* di = Directory::CreateDirectory(path);
                Console::WriteLine(S"The directory was created successfully at {0}.", __box(Directory::GetCreationTime(path)));
            }
            else
            {
                Console::WriteLine(S"That path already exists.");
            }
        } 
        catch (Exception* e) 
        {
            Console::WriteLine(S"The process failed: {0}", e);
        }
    
        // Create a reference to the source directory.
        try 
        {
            // Only get files that match the wildcard character pattern.
            String* dirs[] = Directory::GetFiles(FromDirectory, WildCard);
            Console::WriteLine(S"The number of files ending with XLS is {0}.", __box(dirs->Length));
            // Iterate through the file collection.
            Collections::IEnumerator* myEnum = dirs->GetEnumerator();
            while (myEnum->MoveNext()) 
            {
                // Get the source file path and the destination file path.
                String * SourceFilePath = static_cast<String *>(myEnum->Current);
                String * TargetFilePath = String::Concat(ToDirectory ,Path::GetFileName(SourceFilePath));
                
                // Compare the optional (fourth) start-up parameter value.
                if (String::Compare(MoveCopyParam ,S"move",true)==0)
                {
                    // Move the file.
                    File::Move(SourceFilePath, TargetFilePath);
                }
                else if (String::Compare(MoveCopyParam ,S"delete",true)==0)
                {
                    // Delete the file.
                    File::Delete(SourceFilePath);
                }
                else 
                {
                    // Copy the file and then overwrite the file if the file already exists.
                    File::Copy(SourceFilePath, TargetFilePath, true);
                }
            }
        } 
        catch (Exception* e) 
        {
            Console::WriteLine(S"The process failed: {0}", e);
        }
    }
    Observação você deve adicionar o common language runtime oferecem suporte a compilador opção (/ CLR: oldSyntax) no Visual C++ 2005 a compilar com êxito o exemplo de código anterior. Para adicionar a opção de compilador de suporte de tempo de execução idioma comum no Visual C++ 2005, siga estas etapas:
    1. Clique em Project e clique em <ProjectName> propriedades .

      Observação <ProjectName> é um espaço reservado para o nome do projeto.
    2. Expanda Configuration Properties e, em seguida, clique em Geral .
    3. Clique para selecionar Common Language Runtime suporte, sintaxe antiga (/ CLR: oldSyntax) no projeto oferece suporte a Common Language Runtime configuração no painel à direita, clique em Aplicar e em seguida, clique em OK .
    Para obter mais informações sobre o common language runtime oferece suporte à opção do compilador, visite o seguinte site da Microsoft:
    / clr (Common Language Runtime Compilation)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
  15. Alterne para modo de exibição Designer.
  16. Clique com o botão direito do mouse em qualquer lugar na exibição do Designer e, em seguida, clique em Propriedades .
  17. Na janela Properties, clique no link Add Installer .

    Isso cria uma nova classe ProjectInstaller com ServiceInstaller variáveis de classe e com ServiceProcessInstaller variáveis de classe. ProjectInstaller é aberto no modo de exibição Designer.
  18. No modo de exibição Designer, clique com o botão direito do mouse em ServiceProcessInstaller1 e, em seguida, clique em Propriedades .
  19. Na janela Properties, altere a propriedade conta como LocalSystem .
  20. Pressione CTRL + SHIFT + B para criar o projeto.

Instalar o serviço Windows

No Visual Basic .NET e no Visual .NET translation from VPE for Csharp você deve criar um projeto de instalação para instalar um Windows Service. No entanto, Visual C++ .NET Windows Service executáveis fazer não requerem uma instalação do projeto para instalar um Windows Service. Não é possível executar o utilitário installutil diretamente no Visual C++ .NET Windows serviço executável. O Windows Service executável tem funcionalidade de instalação interna. Para chamar essa funcionalidade, execute o executável com a opção - instalar . Certifique-se de que você adicionar a extensão .exe quando você usar essa opção.

Para instalar o serviço do Windows, execute estas etapas:
  1. Clique em Iniciar e, em seguida, clique em Executar .
  2. Na caixa Abrir, digite cmd e, em seguida, clique em OK .

    Isso abre o prompt de comando.
  3. No prompt de comando, localize o diretório onde você criou o projeto Windows Service e localize o Debug diretório sob o diretório onde você criou o projeto Windows Service.
  4. No prompt de comando, digite Windows Service Executable File - instalar e, em seguida, pressione ENTER.

    O serviço do Windows que você criou é instalado no computador.

    Observação Windows Service Executable File é o espaço reservado para o nome do arquivo executável Windows Service que você criou.

Iniciar o serviço do Windows

Depois de criar o serviço do Windows e, em seguida, instalar o serviço Windows, você deve fornecer parâmetros de inicialização para iniciar o serviço do Windows.

O serviço do Windows criado anteriormente requer três parâmetros de inicialização para executar com êxito. Os parâmetros de inicialização necessário são:
  • Caminho de diretório de arquivos de origem
  • Caminho de diretório de destino (destino)
  • Padrão de pesquisa de caractere curinga
Há um quarto parâmetro de inicialização opcional que você pode fornecer. Esse parâmetro de inicialização opcional define a operação que deseja que o serviço do Windows para executar. As operações são mover, excluir ou copiar. Cópia é a operação padrão.

Para iniciar o serviço do Windows, execute estas etapas:
  1. No painel de controle, clique duas vezes em Ferramentas administrativas e, em seguida, clique duas vezes em serviços .

    Isso abre a janela Serviços.
  2. Localize FileHandlingWinService na lista de serviços instalados.
  3. Clique com o botão direito do mouse FileHandlingWinService e, em seguida, clique em Propriedades .
  4. Na caixa de texto parâmetros de inicialização , digite os seguintes parâmetros de inicialização para o serviço Windows: "Source Drive Letter: \\ YourSourceDirectory \\" "Destination Drive Letter: \\ YourDestinationDirectory \\""*.txt" "Mover" .

    Este comando move um conjunto de arquivos de uma pasta para outra pasta.

    Observação Source Drive Letter, YourSourceDirectory, Destination Drive Letter e YourDestinationDirectory são espaços reservados para letra de unidade a fonte de arquivo, o caminho de arquivo de fonte no formato UNC, a letra de unidade do arquivo de destino e o caminho do arquivo de destino no formato UNC, respectivamente.
  5. Clique em Iniciar .

Verifique se o aplicativo funciona

  1. Copie alguns arquivos de texto no seu diretório de origem antes de iniciar o serviço do Windows.
  2. Inicie o serviço do Windows. Especifique os parâmetros inicialização correta.
  3. Espere 20 segundos.

    Vinte segundos é o intervalo de controle de Timer que você especificou.
  4. Localize o diretório de destino.

    Observe que os arquivos de texto que você copiou estão listados no diretório de destino.
  5. Copie outros arquivos de texto na pasta de origem. Verificar se esses arquivos de texto são copiados para o diretório de destino depois que o Timer de controlar o intervalo.

Solução de problemas

Você pode usar os recursos a seguir se você precisar de Ajuda:
  • Para obter informações adicionais, consulte documentação do Microsoft .NET Framework Software Development Kit (SDK)

    Observação O .NET Framework SDK afirma o seguinte:
    O arquivo executável compilado que cria um projeto de aplicativo de serviço deve ser instalado no servidor antes do projeto pode funcionar de maneira significativa. Não é possível depurar ou executar um aplicativo de serviço pressionando F5 ou F11; você não pode executar imediatamente um serviço ou etapa no seu código. Em vez disso, você deve instalar e iniciar o serviço e anexar um depurador ao processo do serviço.
  • Para obter informações adicionais sobre como depurar aplicativos de serviço do Windows, visite o seguinte site da Web Microsoft Developer Network (MSDN):
    http://msdn2.microsoft.com/en-us/library/aa984342(VS.71).aspx
  • Para obter informações adicionais sobre por que você deve usar o controle Timer, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    820639PROBLEMA: O evento de timer de formulários do Microsoft Windows não é aumentado em um serviço do Windows
    Certifique-se de que usar o controle Timer que você moveu da guia Components do Toolbox.

Referências

Para obter informações adicionais sobre o diretório de classe, visite o seguinte site da MSDN:
http://msdn2.microsoft.com/en-us/library/system.io.directory(vs.71).aspx
Para obter informações adicionais sobre o arquivo de classe, visite o seguinte site da MSDN:
http://msdn2.microsoft.com/en-us/library/system.io.file(vs.71).aspx

Propriedades

ID do artigo: 829483 - Última revisão: quinta-feira, 19 de abril de 2007 - Revisão: 2.4
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft .NET Framework 1.1
Palavras-chave: 
kbmt kbwinservsetup kbtimer kbserviceprocess kbservice kbfilesystems kbfileio kbdirectory kbdir kbcollections kbhowtomaster KB829483 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 829483

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com