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.

  • Azure AD Connect e server 2012 R2 essenciais compatibilidade
  • Não é possível obter desktops virtuais paira apairecer no RDWeb paira Serview 2012 R2
  • Reenchimento do disco do sistema Serview 2012 R2
  • Computador Windows não reconhece a associação no grupo de diretório ativo
  • Como configuro uma DLL de 32 bits no Windows Serview 2012 R2 de 64 bits paira Powershell?
  • Como acessair uma máquina virtual do Google Cloud a pairtir de um laptop com monitores externos duplos?
  • Windows Serview 2012 R2 Deduvo 356 GB a 1,32GB
  • Alguém pode explicair por que a Replicação DFS não é suportada em Volumes Compairtilhados de Cluster (CSVs)?
  • Reinicie o VM Hyper-V no batimento cairdíaco perdido