0

メイン スクリプトのさまざまな部分で、この関数を数回呼び出す必要があります。ソフトウェアがインストールされているかどうかを確認するだけです (ソフトウェア名が引数として与えられます)。

これは、この関数であるコードのスニペットです。それのリモートの側面はうまく機能します。

'*************************************************************************
' This Subroutine checks if software is installed on system
'*************************************************************************
Sub CheckInstalledSoftware(item)
   ' This sub is VERY slow
   blnCondition = False 'Simple check to see if software was found
   WScript.Echo("Check if " & item & " is installed.")
   WScript.Echo("------------------------------------")
   Set colSoftware = objWMISrvc.ExecQuery("SELECT * FROM Win32_Product WHERE Name = '" & item & "'")
   For Each objSoftware in colSoftware
                If (objSoftware.InstallState = 5) Then
                   WScript.Echo(item & " is installed" & vbCrLf)
                   blnCondition = True
                End  If
   Next
   If blnCondition <> True Then
      WScript.Echo(item & " is not installed" & vbCrLf)
   End If


End Sub
4

1 に答える 1

2

残念ながら、これをこれ以上速くする方法はありません。Win32_Productクラスには、大きなオーバーヘッドがあります。唯一のオプションは、この特定のWMIクラスを使用する必要のないメソッドを見つけることです。追加のコードがある場合は、他のことをしながらこの部分を非同期で実行できます。[プログラムの追加と削除]ダイアログも開いた場合、同じパフォーマンスの低下に気付くでしょう。

于 2012-08-30T19:30:02.437 に答える