2016-07-22 13 views
0

Word文書を更新するためのPERLスクリプトがあります。 PERLスクリプトは、MS Office 2003または2007で動作するようにコーディングされています。 BFを使用してアップデートを実行しようとしているコンピュータにOffice 2003がインストールされている場合、適切なテンプレートがインストールされ、マクロセキュリティ設定が更新されました。PERLとWin32 :: WordでWord文書を操作すると、コマンドラインでは動作しますが、BuildForgeでは動作しません。

BFをコマンドラインで使用する場合は、exactコマンドを実行すると、期待通りに機能します。 BFステップで実行すると、 "\ servername \ projectname \ bin \ updateVer.pl 94行目のドキュメントを開くことができません"(行番号はPerlスクリプトのcroakです)。

スクリプトはしゃがれ声に、このように見上げ:

# enable Sanity checking and make the variable names meaningful 
use strict; 
use warnings; 
use English; 
use Win32::OLE; 

# Gain access to MS Word 'wd' constants 
use Win32::OLE::Const ('Microsoft Word'); 

use FindBin qw($RealDir); 

use lib ($RealDir, "$RealDir/..", "$RealDir/../lib"); 

# include the common and log utilities 
use SCCM::Common; 
use SCCM::Logs; 

# use command line inputs 
use Getopt::Long qw(:config auto_abbrev permute ignore_case pass_through); 

# set up logs and process logfile options 
logOptions(qw(-log now)); 

my $bookmark_update_result = ""; 
my $update_ref_result = ""; 

# Get input from user 

my $path; 
my $bookmarkName; 
my $bookmarkValue; 
my $Word; 
my $newWord = 0; 

GetOptions("path=s"   => \$path, 
     "bookmarkName=s" => \$bookmarkName, 
    "bookmarkValue=s" => \$bookmarkValue); 

unless (defined($path)) 
    { croakf "%[Fail] Path and filename of SVD are required\n"; } 

unless (defined($bookmarkName) && defined($bookmarkValue)) 
    { croakf "%[Fail] bookmarkName and bookmarkValue parameters are both required.\n"; } 

# Start Word in a safer way, checking to see if user has it open first. 

eval 
{ 
    $Word = Win32::OLE->GetActiveObject('Word.Application'); 
    if (! $Word) 
    { 
    $newWord = 1; 
    $Word = Win32::OLE->new('Word.Application', 'Quit'); 
    } 
}; 

croakf "%[Fail] -- unable to start Word Engine: [email protected]\n", Win32::OLE->LastError() if ([email protected] || ! $Word); 

my $dispAlerts = $Word->{'DisplayAlerts'}; 
$Word->{'DisplayAlerts'} = wdAlertsNone; 

if ($newWord) 
{ 
    $Word->{'Visible'} = 0; 
} 

my $doc = $Word->Documents->Open($path) or 
    croakf ("%[Fail] Unable to open doc ", Win32::OLE->LastError()); 

スクリプトは、このように呼ばれている: ccperl \サーバー名\プロジェクト名\ binに\ updateVer.pl -path「C:\ BuildForgeBuilds \ BFProjectName \ BFProjectName_0177 \ MyDocument.doc "-bookmarkName REV_Baseline -bookmarkValue My_Baseline_10.20.30

私の仕事の文書を開いても問題ないとBFに確信させる方向を得ることはできますか? ありがとうございました!

+0

これは* "Perl"と呼ばれています* – Borodin

+0

ごめんなさい@ボロディン、あなたのご意見が私をどのように助けてくれるのか分かりません。私たちはccperlを使用しています。なぜなら私たちはすべてのマシンにccをインストールしているからです。 – ChrisM

+0

あなたの質問に対する答えはありません。それが理由だ。あなたがPerl言語の名前を正しく綴るのを助けるはずです。あなたはJAVAやPYTHON、あるいは本当にMS OFFICEを書くのか疑問です。 – Borodin

答えて

0

ジョブが実行されていたマシンのテンプレートから「アーカイブ」ビットを削除した後、BFはジョブを正常に実行できました。

面白い私はテンプレートで 'アーカイブ'ビットを設定してサーバー上で直接実行できます。しかし、ねえ、私はもはやこれに固執していません。

私の質問を読んだり、問題の可能性があると考えた人にも感謝します。

関連する問題