Saturday 28 April 2018

Exemplo de waitforexit net vb


Como usar o Process. Start no Visual Basic.
Quando você precisa iniciar outro aplicativo usando o código VB.
O método Start do objeto Process é, possivelmente, uma das ferramentas mais subestimadas disponíveis para um programador. Como método, Start tem uma série de sobrecargas, que são conjuntos diferentes de parâmetros que determinam exatamente o que o método faz. As sobrecargas permitem que você especifique praticamente qualquer conjunto de parâmetros que você queira passar para outro processo quando for iniciado.
O que você pode fazer com o Process. Start é realmente limitado apenas pelos processos que você pode usar com ele.
Se você deseja exibir o arquivo Leia-me baseado em texto no Bloco de notas, é tão fácil quanto:
Isso pressupõe que o arquivo LeiaMe está na mesma pasta que o programa e que o Bloco de Notas é o aplicativo padrão para os tipos de arquivo. txt e está no caminho do ambiente do sistema.
Process. Start semelhante ao comando shell no VB6.
Para programadores familiarizados com o Visual Basic 6, Process. Start é um pouco como o comando VB 6 Shell. No VB 6, você usaria algo como:
Usando Process. Start.
Você pode usar esse código para iniciar o Bloco de Notas maximizado e criar um objeto ProcessStartInfo que possa ser usado para um controle mais preciso:
Iniciando um processo oculto.
Você pode até iniciar um processo oculto.
Mas tenha cuidado. A menos que você adicione mais código para encerrar o processo, provavelmente será necessário finalizá-lo no Gerenciador de tarefas. Normalmente, os processos ocultos são usados ​​apenas com processos que não possuem nenhum tipo de interface de usuário.
Recuperando o nome de um processo.
Trabalhar com Process. Start como um objeto lhe dá muita capacidade. Por exemplo, você pode recuperar o nome do processo que foi iniciado. Este código irá mostrar o & # 34; bloco de notas & # 34; na janela de saída:
Isso era algo que você não poderia fazer com o comando VB6 Shell porque ele lançava o novo aplicativo de forma assíncrona. Usando WaitForExit pode causar o problema inverso porque você tem que iniciar um processo em um novo segmento se você precisar que ele seja executado de forma assíncrona. Por exemplo, se você precisar que os componentes permaneçam ativos em um formulário em que um processo foi iniciado e WaitForExit foi executado. Normalmente, esses componentes não estarão ativos. Codifique e veja por si mesmo.
Uma maneira de forçar o processo a parar é usar o método Kill.
Esse código aguarda dez segundos e termina o processo.
Descobri que um atraso forçado era necessário para permitir que o processo fosse concluído para evitar um erro.
Na maioria dos casos, provavelmente é uma boa ideia colocar seu processamento em um bloco Using para garantir que os recursos usados ​​pelo processo sejam liberados.
Para tornar tudo isso ainda mais fácil de se trabalhar, há até mesmo um componente Process que você pode adicionar ao seu projeto para que você possa fazer muitas das coisas mostradas acima em tempo de design em vez de tempo de execução.
Uma das coisas que isso facilita muito é codificar eventos gerados pelo processo, como o evento quando o processo foi encerrado. Você também pode adicionar um manipulador usando um código como este:
Mas simplesmente selecionar o evento para o componente é muito mais fácil.

Processo . Método WaitForExit (Int32)
A documentação de referência da API tem uma nova casa. Visite o Navegador da API em docs. microsoft para ver a nova experiência.
Instrui o componente Processo a aguardar o número especificado de milissegundos para o processo associado sair.
Assembly: System (no System. dll)
Parâmetros
O período de tempo, em milissegundos, para aguardar a saída do processo associado. O máximo é o maior valor possível de um inteiro de 32 bits, que representa infinito para o sistema operacional.
Valor de retorno.
true se o processo associado tiver saído; Caso contrário, false.
A configuração de espera não pôde ser acessada.
Nenhuma identificação de processo foi definida e uma Handle da qual a propriedade Id pode ser determinada não existe.
Não há processo associado a este objeto Process.
Você está tentando chamar WaitForExit (Int32) para um processo que está sendo executado em um computador remoto. Este método está disponível apenas para processos em execução no computador local.
WaitForExit (Int32) faz com que o segmento atual espere até que o processo associado termine. Deve ser chamado depois que todos os outros métodos forem chamados no processo. Para evitar o bloqueio do segmento atual, use o evento Exited.
Este método instrui o componente Process a aguardar uma quantidade finita de tempo para o processo sair. Se o processo associado não sair no final do intervalo porque a solicitação para finalizar é negada, false é retornado para o procedimento de chamada. Você pode especificar um número negativo (Infinito) por milissegundos e Processo. WaitForExit (Int32) se comportará da mesma maneira que a sobrecarga WaitForExit (). Se você passar 0 (zero) para o método, ele retornará true somente se o processo já tiver saído; caso contrário, retorna imediatamente false.
No Framework 3.5 e em versões anteriores, se milissegundos fosse -1, a sobrecarga WaitForExit (Int32) aguardava milissegundos MaxValue (aproximadamente 24 dias), não indefinidamente.
Quando a saída padrão foi redirecionada para manipuladores de eventos assíncronos, é possível que o processamento de saída não seja concluído quando esse método retornar. Para garantir que o tratamento assíncrono de eventos tenha sido concluído, chame a sobrecarga WaitForExit () que não recebe nenhum parâmetro após receber um valor verdadeiro dessa sobrecarga. Para ajudar a garantir que o evento Exited seja tratado corretamente nos aplicativos do Windows Forms, defina a propriedade SynchronizingObject.
Quando um processo associado sai (é desligado pelo sistema operacional por meio de uma finalização normal ou anormal), o sistema armazena informações administrativas sobre o processo e retorna ao componente que chamou WaitForExit (Int32). O componente de processo pode acessar as informações, que inclui o ExitTime, usando o identificador para o processo de saída.
Como o processo associado foi encerrado, a propriedade Handle do componente não aponta mais para um recurso de processo existente. Em vez disso, o identificador pode ser usado apenas para acessar as informações do sistema operacional sobre o recurso do processo. O sistema está ciente de identificadores para processos que não foram liberados pelos componentes do processo, portanto, ele mantém as informações de ExitTime e identificador na memória até que o componente de processo especificamente libera os recursos. Por esse motivo, sempre que você chamar a instância Start for Process, chame Close quando o processo associado tiver terminado e você não precisar mais de nenhuma informação administrativa sobre ele. Close libera a memória alocada para o processo finalizado.

Processo . Método WaitForExit ()
A documentação de referência da API tem uma nova casa. Visite o Navegador da API em docs. microsoft para ver a nova experiência.
Instrui o componente Process a aguardar indefinidamente que o processo associado seja encerrado.
Assembly: System (no System. dll)
A configuração de espera não pôde ser acessada.
Nenhuma identificação de processo foi definida e uma Handle da qual a propriedade Id pode ser determinada não existe.
Não há processo associado a este objeto Process.
Você está tentando chamar WaitForExit () para um processo que está sendo executado em um computador remoto. Este método está disponível apenas para processos em execução no computador local.
WaitForExit () faz com que o segmento atual espere até que o processo associado termine. Deve ser chamado depois que todos os outros métodos forem chamados no processo. Para evitar o bloqueio do segmento atual, use o evento Exited.
Este método instrui o componente Process a aguardar uma quantidade infinita de tempo para que os manipuladores de processo e evento saiam. Isso pode fazer com que um aplicativo pare de responder. Por exemplo, se você chamar CloseMainWindow para um processo que tenha uma interface com o usuário, a solicitação para o sistema operacional finalizar o processo associado poderá não ser tratada se o processo for gravado para nunca inserir seu loop de mensagem.
No Framework 3.5 e em versões anteriores, a sobrecarga WaitForExit () aguardava milissegundos MaxValue (aproximadamente 24 dias), não indefinidamente. Além disso, as versões anteriores não esperavam que os manipuladores de eventos saíssem se o tempo máximo de MaxValue fosse atingido.
Essa sobrecarga assegura que todo o processamento tenha sido concluído, incluindo o tratamento de eventos assíncronos para saída padrão redirecionada. Você deve usar essa sobrecarga após uma chamada para a sobrecarga WaitForExit (Int32) quando a saída padrão tiver sido redirecionada para manipuladores de eventos assíncronos.
Quando um processo associado é encerrado (ou seja, quando é encerrado pelo sistema operacional por meio de uma finalização normal ou anormal), o sistema armazena informações administrativas sobre o processo e retorna ao componente que chamou WaitForExit (). O componente de processo pode acessar as informações, que inclui o ExitTime, usando o identificador para o processo de saída.
Como o processo associado foi encerrado, a propriedade Handle do componente não aponta mais para um recurso de processo existente. Em vez disso, o identificador pode ser usado apenas para acessar as informações do sistema operacional sobre o recurso do processo. O sistema está ciente de identificadores para processos que não foram liberados pelos componentes do processo, portanto, ele mantém as informações de ExitTime e identificador na memória até que o componente de processo especificamente libera os recursos. Por esse motivo, sempre que você chamar a instância Start for Process, chame Close quando o processo associado tiver terminado e você não precisar mais de nenhuma informação administrativa sobre ele. Close libera a memória alocada para o processo finalizado.

Tópico: [RESOLVIDO] process. start e process. waitforexit.
Ferramentas de Tópicos.
Modo Linear Alterne para o Modo Híbrido Alterne para o Modo Rosqueado.
[RESOLVIDO] process. start e process. waitforexit.
Como posso fazer o programa esperar que o processo termine?
Re: [RESOLVIDO] process. start e process. waitforexit.
FAQ de desenvolvimento de banco de dados VBForums.
Minhas submissões do CodeBank: VB | C #
Re: [RESOLVIDO] process. start e process. waitforexit.
Re: [RESOLVIDO] process. start e process. waitforexit.
Visual Basic VBForums Visual Basic VS 2010 [RESOLVIDO] process. start e process. waitforexit.
Permissões de postagem.
Você não pode postar novos tópicos Você não pode postar respostas Você não pode postar anexos Você não pode editar suas mensagens.
Código BB está Ligado Smilies estão Ligados [IMG] o código está Ligado [VÍDEO] o código está Ligado Código HTML está Desligado.
Obtenha conselhos práticos e aprenda as melhores práticas para mover seus aplicativos do RDBMS para o Banco de dados de engajamento do Couchbase. (patrocinado) & rarr; Libere sua estratégia de DevOps sincronizando as alterações de aplicativos e bancos de dados.
Aprenda a reduzir os ciclos de desenvolvimento de banco de dados, integrar revisões de qualidade de código no fluxo de trabalho de Integração Contínua e entregar código 40% mais rápido. (patrocinado) & rarr; Crie aplicativos em escala de planeta com o Azure Cosmos DB em minutos.
Veja uma demonstração mostrando como você pode criar aplicativos distribuídos globalmente em escala planetária em minutos com o Azure Cosmos DB. (webinar patrocinado) & rarr; O guia abrangente para computação em nuvem.
Uma visão geral completa do Cloud Computing focada no que você precisa saber, desde a seleção de uma plataforma até a escolha de um fornecedor de nuvem. & rarr; Pode ser hora de atualizar seu banco de dados se.
Entenda melhor os sinais de que sua empresa superou seu banco de dados atual. (webinar patrocinado).

Exemplo de waitforexit Vb
Renomeie TestService. vb e TestService. exe. config para & lt; YourServiceName & gt;.vb e & lt; YourServiceName & gt;.exe. config (sem espaços no nome, por favor) Faça uma pesquisa / substituição em todas as instâncias da string "TestService" em & lt; YourServiceName & gt;.vb para nomear seu serviço. Use o mesmo & lt; YourServiceName & gt; como na etapa 1 Defina a conta do processo de serviço (Me. ServiceProcessInstaller1.Account) como "ServiceAccountworkService", "ServiceAccount. LocalService", "ServiceAccount. LocalSystem" ou "ServiceAccount. User" de acordo com seu design de segurança. Observe que as contas NetworkService e LocalService podem precisar de permissões explícitas de leitura / execução de NTFS na pasta que contém os arquivos de serviço para que o serviço possa iniciar Set ActionInterval no arquivo. config. Isso determina o intervalo em segundos entre a execução do código de carga útil do serviço Adicione seu código e funções ao & lt; YourServiceName & gt;.vb. A execução da carga útil começa na função RunPayload () Execute o Compile. vbs para criar o & lt; YourServiceName & gt;.exe Execute o ServiceInstall. vbs para instalar o serviço Procure no log de eventos do aplicativo Windows mensagens do serviço TestService. vb.
'1. Renomeie TestService. vb e TestService. exe. config para & lt; YourServiceName & gt;.vb e & lt; YourServiceName & gt;.exe. config (sem espaços no nome, por favor)
2. Faça uma pesquisa / substituição em todas as instâncias da cadeia "TestService" neste arquivo de origem para nomear seu serviço. Use o mesmo & lt; YourServiceName & gt; como no passo 1.
3. Defina a conta do processo de serviço (Me. ServiceProcessInstaller1.Account) como "ServiceAccountworkService", "ServiceAccount. LocalService", "ServiceAccount. LocalSystem" ou "ServiceAccount. User" de acordo com o design de segurança. Observe que as contas NetworkService e LocalService podem precisar de permissões explícitas de leitura / execução de NTFS na pasta que contém os arquivos de serviço para que o serviço possa ser iniciado.
'4. Defina ActionInterval no arquivo. config. Isso determina o intervalo em segundos entre a execução do código da carga útil do serviço.
5. Adicione o seu código e funções ao & lt; YourServiceName & gt;.vb. A execução da carga útil começa na função RunPayload ()
'6. Execute o Compile. vbs para criar o & lt; YourServiceName & gt;.exe.
'7. Execute o ServiceInstall. vbs para instalar o serviço. Há também um ServiceUnInstall. vbs correspondente que pode ser usado para desinstalar o serviço.
'8. Procure no log de eventos do aplicativo do Windows mensagens do serviço.
& lt; Assembly: AssemblyDescription ("Serviço de teste do Windows") & gt;
& lt; Assembly: AssemblyCopyright ("Copyright (C) MyCompanyName") & gt;
Private Shared PollingInterval As Integer = 10000.
Private Shared ActionInterval As Integer = ConfigurationManager. AppSettings ("ActionInterval")
Private Shared KeepRunning Como Boolean = True.
'Coloque seu código de carga útil de serviço e / ou chamadas de função aqui. Por exemplo:
WriteToEventLog ("Execução de carga útil do TestService", 1000)
Captura e como exceção.
WriteToEventLog ("Ocorreu um erro:" & amp; e. Message, 2000, EventLogEntryType. Error)
Dim WorkerThread como Thread = Novo Thread (AddressOf RunPayload)
WorkerThread. Name = "Thread de carga útil do TestService"
Dim LastActionTime como Data = DateAdd (DateInterval. Day, -1, Date. Now)
Do While KeepRunning.
Se DateDiff (DateInterval. Second, LastActionTime, Date. Now) & gt; = ActionInterval Então.
Entrada ByVal como String, _.
Opcional ByVal EventID As Integer = 0, _.
EventType ByVal Opcional Como EventLogEntryType = EventLogEntryType. Information, _.
Opcional ByVal AppName As String = "TestService", _.
Opcional ByVal LogName As String = "Application") Como Boolean.
Dim objEventLog como novo EventLog ()
If Not Diagnostics. EventLog. SourceExists (AppName) Então.
objEventLog. WriteEntry (Entry, EventType, EventID)
Captura Ex como exceção.
WriteToEventLog ("TestService starting", 1000)
ServiceThread = Novo Encadeamento (AddressOf RunScheduler)
ServiceThread. Name = "Encadeamento do agendador TestService"
WriteToEventLog ("TestService parando." & Amp; _.
"Por favor, note: o processo de trabalho irá durar até" & amp; _.
PollingInterval / 1000 & amp; "segundos antes de terminar.", 1000)
Public Class ProjectInstaller.
Me. ServiceProcessInstaller1 = Novo ServiceProcessInstaller.
Me. ServiceInstaller1 = Novo ServiceInstaller.
Amigo WithEvents ServiceProcessInstaller1 As ServiceProcessInstaller.
Friend WithEvents ServiceInstaller1 Como ServiceInstaller.
Classe Parcial TestService.
Substituições protegidas Sub Dispose (ByVal disposing As Boolean)
Se a eliminação de componentes AndAlso ainda não é nada.
Compartilhado Sub Main ()
Dim ServicesToRun () Como System. ServiceProcess. ServiceBase.
ServicesToRun = Novo System. ServiceProcess. ServiceBase ()
Private Sub InitializeComponent ()
components = Novo SystemponentModel. Container ()
& lt;! - ActionInterval é o intervalo em segundos entre a execução da carga útil do serviço. Mínimo é de 10 segundos e por favor use múltiplos de 10 - & gt;
& lt; add key = "ActionInterval" value = "600" / & gt;
Se WScript. Arguments. Length = 0 então.
Definir objShell = CreateObject ("Shell. Application")
objShell. ShellExecute "wscript. exe", Chr (34) & amp; WScript. ScriptFullName & amp; Chr (34) & amp; "" "" & amp; strCurPath & amp; "" "", "", "runas", 1.
strPathToInstallUtil = GetNewestInstalledFrameworkPath () & amp; "\ installutil. exe"
Definir objFs = CreateObject ("Scripting. FileSystemObject")
Definir objFolder = objFs. GetFolder (strCurPath)
For Each objFile em objFolder. Files.
If Right (objFile. Name, 4) = ".exe" Então.
strCommandOutput = "Resumo da instalação do serviço:" & amp; vbcrlf & amp; vbcrlf.
strCommandOutput = strCommandOutput & amp; runCMD (strPathToInstallUtil & amp; "" & amp; strInstallOptions & amp; "" "" & amp; strCurPath & amp; "\" & amp; objFile. Name & amp; "" "")
strCommandOutput = strCommandOutput & amp; runCMD ("NET START" e Substituir (objFile. Name, ".exe", ""))
Se strCommandOutput & lt; & gt; "" Então.
Definir objShell = Wscript. CreateObject ("WScript. Shell")
Definir objFs = CreateObject ("Scripting. FileSystemObject")
Definir objFolder = objFs. GetFolder (strCurPath)
For Each objFile em objFolder. Files.
If Right (objFile. Name, 4) = ".exe" Então.
Se blnExeFound = False Então 'Nenhum arquivo exe encontrado na pasta de serviços. Execute o script de compilação para gerá-lo.
objShell. Run "Compile. vbs", 1, verdadeiro.
Definir objShell = Nothing.
Definir objFs = Nothing.
Definir objFolder = Nothing.
Definir objWsh = CreateObject ("Wscript. Shell")
Definir objFs = CreateObject ("Scripting. FileSystemObject")
Array ("Instalação do HKLM \ Software \ Microsoft \ NET Framework \ NDP \ v4 \ Full \ Install", _.
"Instalação do HKLM \ Software \ Microsoft \ NET Framework \ NDP \ v2.0.50727 \ Install", _.
"Instalação do HKLM \ Software \ Microsoft \ NET Framework \ NDP \ v4 \ Full \ Install", _.
"Instalação do HKLM \ Software \ Microsoft \ NET Framework \ NDP \ v2.0.50727 \ Install")
Para i = 0 a Ubound (strArrayPaths)
Se objFs. FileExists (strArrayPaths (i) & amp; "\ installutil. exe") Então.
On Error Resume Next.
Se objWsh. RegRead (strArrayRegKeys (i)) = 1 Então.
Se Err. number = 0 Then.
On Error Goto 0.
Definir objFs = Nothing.
Definir objWsh = Nothing.
Definir objWSHShell = WScript. CreateObject ("WScript. Shell")
On Error Resume Next.
GetOsMajorVersion = CInt (Esquerda (objWSHShell. RegRead ("HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ CurrentVersion"), 1))
Se err. number & lt; & gt; 0 então.
On Error Goto 0.
Dim objShell, objExec, strOut.
Definir objShell = WScript. CreateObject ("WScript. Shell")
Defina objExec = objShell. Exec (strRunCmd)
Do While Não objExec. StdOut. AtEndOfStream.
strOut = strOut & amp; objExec. StdOut. ReadLine () & amp; vbcrlf.
Definir objShell = Nothing.
Definir objExec = Nothing.
Se WScript. Arguments. Length = 0 então.
Definir objShell = CreateObject ("Shell. Application")
objShell. ShellExecute "wscript. exe", Chr (34) & amp; WScript. ScriptFullName & amp; Chr (34) & amp; "" "" & amp; strCurPath & amp; "" "", "", "runas", 1.
strPathToInstallUtil = GetNewestInstalledFrameworkPath () & amp; "\ installutil. exe"
Definir objFs = CreateObject ("Scripting. FileSystemObject")
Definir objFolder = objFs. GetFolder (strCurPath)
For Each objFile em objFolder. Files.
If Right (objFile. Name, 4) = ".exe" Então.
strCommandOutput = "Resumo da desinstalação do serviço:" & amp; vbcrlf & amp; vbcrlf.
strCommandOutput = strCommandOutput & amp; runCMD ("NET STOP" e Substituir (objFile. Name, ".exe", ""))
strCommandOutput = strCommandOutput & amp; runCMD (strPathToInstallUtil & amp; "" & amp; strInstallOptions & amp; "" "" & amp; strCurPath & amp; "\" & amp; objFile. Name & amp; "" "")
Se strCommandOutput & lt; & gt; "" Então.
Definir objWsh = CreateObject ("Wscript. Shell")
Definir objFs = CreateObject ("Scripting. FileSystemObject")
Array ("Instalação do HKLM \ Software \ Microsoft \ NET Framework \ NDP \ v4 \ Full \ Install", _.
"Instalação do HKLM \ Software \ Microsoft \ NET Framework \ NDP \ v2.0.50727 \ Install", _.
"Instalação do HKLM \ Software \ Microsoft \ NET Framework \ NDP \ v4 \ Full \ Install", _.
"Instalação do HKLM \ Software \ Microsoft \ NET Framework \ NDP \ v2.0.50727 \ Install")
Para i = 0 a Ubound (strArrayPaths)
Se objFs. FileExists (strArrayPaths (i) & amp; "\ installutil. exe") Então.
On Error Resume Next.
Se objWsh. RegRead (strArrayRegKeys (i)) = 1 Então.
Se Err. number = 0 Then.
On Error Goto 0.
Definir objFs = Nothing.
Definir objWsh = Nothing.
Definir objWSHShell = WScript. CreateObject ("WScript. Shell")
On Error Resume Next.
GetOsMajorVersion = CInt (Esquerda (objWSHShell. RegRead ("HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ CurrentVersion"), 1))
Se err. number & lt; & gt; 0 então.
On Error Goto 0.
Dim objShell, objExec, strOut.
Definir objShell = WScript. CreateObject ("WScript. Shell")
Defina objExec = objShell. Exec (strRunCmd)
Do While Não objExec. StdOut. AtEndOfStream.
strOut = strOut & amp; objExec. StdOut. ReadLine () & amp; vbcrlf.
Definir objShell = Nothing.
Definir objExec = Nothing.
strPathToCompiler = GetNewestInstalledFrameworkPath () & amp; "\ vbc. exe"
strCompileOptions = "/ target: winexe / nologo"
Definir objFs = CreateObject ("Scripting. FileSystemObject")
Definir objFolder = objFs. GetFolder (strCurPath)
For Each objFile em objFolder. Files.
Se a direita (objFile. Name, 3) = strSourceCodeExt Então.
strCommandOutput = runCMD (strPathToCompiler & amp; "/ out:" "" & amp; strCurPath & amp; "\" & amp; Esquerda (objFile. Name, InStr (objFile. Name, strSourceCodeExt)) & amp; "exe" & quot; strCompileOptions & amp; ; "" "" & amp; objFile. Name & amp; "" "")
Se strCommandOutput & lt; & gt; "" Então.
Definir objWsh = CreateObject ("Wscript. Shell")
Definir objFs = CreateObject ("Scripting. FileSystemObject")
Array ("Instalação do HKLM \ Software \ Microsoft \ NET Framework \ NDP \ v4 \ Full \ Install", _.
"Instalação do HKLM \ Software \ Microsoft \ NET Framework \ NDP \ v2.0.50727 \ Install", _.
"Instalação do HKLM \ Software \ Microsoft \ NET Framework \ NDP \ v4 \ Full \ Install", _.
"Instalação do HKLM \ Software \ Microsoft \ NET Framework \ NDP \ v2.0.50727 \ Install")

Transferências de arquivos SFTP em.
As técnicas demonstradas por este artigo são implementadas para você no assembly do WinSCP. Usar a montagem é uma abordagem recomendada sobre a implementação dessas técnicas por conta própria.
WinSCP é um cliente SFTP com interface de script que você pode usar para automatizar muitas operações que ele suporta, incluindo transferências de arquivos, sincronização e outras. Portanto, o WinSCP em si não é uma biblioteca (por exemplo, assembly) que você pode chamar diretamente. Embora este guia mostre como usá-lo sem problemas a partir do código.
Antes de começar.
Antes de começar você deve:
Usando WinSCP do código.
Executando o processo WinSCP.
Para executar o winscp use System. Diagnostics. Process. Esta classe permite executar qualquer executável, possivelmente redirecionando sua entrada e saída padrão para um fluxo acessível a partir do código. Código abaixo espera que winscp (ProcessStartInfo. FileName) pode ser encontrado no diretório de trabalho atual ou no caminho de pesquisa. Você precisa fornecer o caminho completo caso contrário.
Alimentando comandos de script usando entrada padrão.
Você pode usar o redirecionamento de entrada padrão (ProcessStartInfo. RedirectStandardInput) para alimentar comandos de script, dispensando a necessidade de montar o arquivo de script temporário.1.
Para alimentar comandos para entrada padrão, use o fluxo Process. StandardInput:
Capturando saídas do processo WinSCP.
Embora você possa redirecionar a saída padrão do processo WinSCP, na verdade não é muito útil, já que a saída do WinSCP não possui nenhum formulário predefinido (não pode ser analisado). Embora possa ser útil capturá-lo, caso deseje mostrá-lo a um usuário em sua GUI ou para fins de diagnóstico.
Se você quiser coletar a saída, redirecione a saída padrão antes de iniciar o WinSCP (ProcessStartInfo. RedirectStandardOutput) e leia o fluxo de saída (Process. StandardOutput). Você precisa coletar continuamente a saída enquanto o script está sendo executado. O fluxo de saída tem capacidade limitada. Depois de preenchido, o WinSCP trava à espera de espaço livre, nunca terminando. Isso significa que você não pode usar Process. WaitForExit por conta própria para aguardar a conclusão do script. Alternativa conveniente é StreamReader. ReadToEnd:
Usando o arquivo de log.
Para capturar os resultados do script, você pode usar o log XML. Para isso, você precisa instruir o WinSCP a armazenar o arquivo de log usando o parâmetro de linha de comando / xmllog (ProcessStartInfo. Arguments).
Se você precisar ler o arquivo de log continuamente, precisará usar o analisador baseado em fluxo (como XmlReader). Consultar exemplo.
O exemplo a seguir mostra como usar a análise baseada em árvore usando o XPathDocument:
Em caso de erro, você pode verificar se há elementos de mensagem para capturar qualquer mensagem de erro associada:
Em caso de sucesso, você pode, por exemplo extrair listagem de diretórios gerada pelo comando ls dentro do elemento ls:
Aguardando o script ser concluído.
Use Process. WaitForExit para aguardar o processo WinSCP concluir.
Se você tiver redirecionado o fluxo de saída, primeiro precisará ler o fluxo de saída até o final.
Uma boa prática é fechar o fluxo de entrada também, se você tiver redirecionado.
Verificando o código de saída.
Quando o script WinSCP for concluído, verifique o código de saída (Process. ExitCode) do processo:
Exemplo C # completo.
Partes individuais deste exemplo são explicadas no capítulo anterior.

No comments:

Post a Comment