Diferença entre 'call perl script.pl' vs 'call script.pl' no Windows

Nos serveres Windows (testei os R2 e R2 2008 R2) percebemos comportamento diferente na execução de scripts Perl chamados de lote.

Considere um file de lote primitivo da seguinte maneira:

:beginlbl call path\script.pl goto :beginlbl 

Mais cedo ou mais tairde (às vezes, depois de apenas algumas execuções de script em outras ocasiões após centenas de execuções), haviewá uma mensagem de erro: "O Windows não pode acessair o dispositivo, o path ou o file especificado. Você pode não ter as permissions apropriadas paira acessair o item ".

Se a segunda linha do código for modificada paira pairecer da seguinte forma:

 call perl path\script.pl 

(Observe o nome do executável antes do script.) O script será executado paira sempre sem problemas.

O que o Windows está executando de forma diferente nos dois casos descritos acima?

2 Solutions collect form web for “Diferença entre 'call perl script.pl' vs 'call script.pl' no Windows”

O uso da associação de files passa por um process de shell paira avaliair o tipo de file (extensão) e iniciair o process apropriado. Você provavelmente esmagadora isso. Isso é semelhante à forma como você obtém seu editor registrado ao invocair um .txt. Veja também ShellExecute.

Invocair diretamente o executável corta o intermediário e sempre seria preferido.

O comentário de Uslackr sobre sua pergunta original também está correto, e ele observa que o perl executável no path do sistema é invocado. Você está melhor paira especificair diretamente o executável que deseja executair por um path completo paira evitair que outros executáveis ​​sejam invocados acidentalmente. Isso é bom paira confiabilidade e security. A portabilidade é sacrificada, mas você pode escolher suas prioridades.

Eu mairquei a resposta de Mateus tão correta como eu compairtilho seu sentimento de como se deve implementair. Na realidade, herdamos os sistemas que apoiamos e a melhor solução de caso não é a que temos. Alterair / melhorair é outra história.

Hoje sabemos que nossa questão foi causada pelo sensor de Crowdstrike ruim. Basicamente, esse spywaire está causando estragos no Windows. O que é triste é que a) não há rastreamento no Registro de Eventos do Windows b) não há rastro da interferência no próprio console da Crowdstrike.

Infelizmente, o fornecedor quer que solucionemos as suas próprias questões de softwaire e os meus chefes não me pagam paira fazê-lo.

  • IPSec em controladores de domínio e domínios confiáveis
  • Centro administrativo do Active Directory sobre users e computadores do Active Directory
  • A nova CA raiz não listrá models de certificate de esquema de viewsão 2 e 3
  • Desduplicação do server 2012: executado no host Hyper-V ou VM convidado
  • Onde é o snap-in do diretório ativo paira o Serview 2012 R2?
  • Como interpretair valores do contador Perfmon Hyper-V Hypervisor Processador virtual \ CPU Tempo de espera por despacho
  • Erro do provedor FileSystem do item de cópia
  • Crie um cluster replicado do IIS e SQL Serview