2

自動化を使用して Visio を実行していますが、Visio プロセスのプロセス ID を取得して完了を確認するのに問題があります。これが私のVBスクリプトです:

Set visio = CreateObject("Visio.InvisibleApp")
Wscript.Echo visio.ProcessID    
Set document = visio.Documents.OpenEx("somefile.vsd", &H88)
document.ExportAsFixedFormat 1, "somefile.pdf", 1, 0
visio.Quit

で実行しcscript // nologoます。


問題はvisio.ProcessID、実際の Windows プロセス ID ではない数値を返すことです (たとえば、実際のプロセス ID が 8146 の場合に 6613)。Visio プロセスが終了する前に cscript ホストが終了したように見え、一時ファイルのクリーンアップに問題が発生します。

Visio のリファレンス ノートは次のとおりです。

問題は、どうすれば Visio プロセス ID を取得したり、適切に終了したことを検出したりできるでしょうか?

ありがとう!

4

2 に答える 2

0

この ID がどのように役立つかわかりません。Visio でエラーが発生したと思われます。試してみましたか

on error resume next

エラーが発生する可能性のある各行の後

if err.number <> 0 then
  wscript.echo err.description
  err.clear
end if

パラメータを省略すると問題があるようですので、すべて使用してください。値については、 http://msdn.microsoft.com/en-us/library/office/ms409271 (v=office.12).aspx を参照してください。use を終了する前にdocument.saved = true、まず結果ファイルが存在するかどうかを確認できます。

EDIT:プロセスが実行されているかどうかを確認します。サービスの名前を変更する必要がある可能性があります(téaskmanagerを確認してください)

set service = GetObject ("winmgmts:")

for each Process in Service.InstancesOf ("Win32_Process")
  If lcase(Process.Name) = "visio.exe" then
    wscript.echo "visio still running"
    wscript.quit
  End If
next
wscript.echo "visio no longer running"

EDIT2: アクティブな visio アプリのプロセス ID を取得します (複数の Visio インスタンスが実行されている場合、GetObject はアクティブなインスタンスを返します。プログラムがアドオンとして実行されるか、図形をダブルクリックして実行されると、アクティブなインスタンスはプログラムが実行されたもの. それ以外の場合, それは最後に実行された、または最前面に移動されたインスタンスです. Visio インスタンスが実行されていない場合, GetObject はエラーを引き起こします) cfr http://webmail.vh.com.tw/ Microsoft/Developing%20Microsoft%20Visio%20Solutions/27.htm

set appObj = GetObject(, "visio.application")
if appObj Is Nothing Then
  wscript.echo "There is no active Visio."
else
  wscript.echo "ProcessID: " & appObj.ProcessID
end if
于 2012-08-05T22:14:52.587 に答える