2010-09-22 3 views

Répondre

1

S'il s'agit du processus restant en "mode serveur" après l'automatisation, vous pouvez simplement appeler la méthode quit sur l'objet d'application. J'ai édité par réponse au How can I run a macro in an Excel file I open with Perl? pour l'inclure. (Vous savez, je pensais que si je vous disais que c'était un objet Application, vous pouvez lire le MS documentation on that object à comprendre ce que vous vouliez faire.)


Cependant, vous pouvez tuer un processus dans les fenêtres avec taskkill.exe . Vous pouvez lire en tapant taskkill /? sur la ligne de commande. Il va gérer taskkill /IM excel.exe. Mais si vous voulez un PID spécifique, vous devez utiliser tasklist.exe. (Type tasklist à l'invite de commande pour voir la sortie ou tasklist /? pour plus d'informations.).

Le code ci-dessous utilise à la fois:

use strict; 
use warnings; 
use English qw<$OS_ERROR>; 
use File::Spec; 

my $sys32dir = File::Spec->catfile($ENV{SYSTEMROOT}, 'System32'); 
my $tasklist_exe = File::Spec->catfile($sys32dir, 'tasklist.exe'); 
my ($excel_line) = grep { /^excel.exe\b/i } `$tasklist_exe`; 
# $excel_line: 'EXCEL.EXE 4468 Console 1 20,968 K 

# The PID is the second column 
my (undef, $pid) = split qr{\s+}, $excel_line; 

if (my $rc = system(File::Spec->catfile($sys32dir, 'taskkill.exe') 
    , '/PID', $pid 
    )) { 
    die ($OS_ERROR + 0) . ' - ' . $OS_ERROR; 
} 
+0

ОК. Je vous remercie!!! – jushlwest

1

avez-vous essayé de passer un appel système à "taskkill/IM excel.exe"?

Questions connexes