現在、ログファイルに書き込む VBS スクリプトがあります。このスクリプトは、複数の同時プロセスから開始できるため、同時実行が心配です。
現在FileSystemObject
、このファイルを開いて書き込むために使用しています。FSO は排他的ファイル アクセスをサポートしていますか?
現在、ログファイルに書き込む VBS スクリプトがあります。このスクリプトは、複数の同時プロセスから開始できるため、同時実行が心配です。
現在FileSystemObject
、このファイルを開いて書き込むために使用しています。FSO は排他的ファイル アクセスをサポートしていますか?
はい、FileSystemObject は排他的ファイル アクセスをサポートしています。OpenTextFile を呼び出したときに別のプロセスがファイルをロックしていると、エラー (アクセス許可拒否エラー) が発生します。エラーをトラップして適切に処理できるはずです (OpenTextFile の呼び出し後に Err.Number <> 0 を実行する方法が 1 つであることを確認してください)。
Windows API にどの程度アクセスできるかはわかりませんが、Windows API のデバッグ インフラストラクチャを確認する必要があります。
基本的に OutputDebugString を使用してDebugViewでキャッチする か、ファイルにパイプすると、ログ ファイルのロックに関する問題が解消され、ログ ファイルに書き込むためにキューに入れられた複数のスクリプトのボトルネックも解消されます。
お役に立てれば。
可能であれば、ファイルへの書き込みが必要になるたびに、ハンドルを閉じて再度開くことをお勧めします。これにより、排他的なファイル アクセスの問題が発生する可能性を回避できます。元:
set objFile = objFSO.OpenTextFile("somefile.txt",8,True)
objFSO.WriteLine "jfdskfdkls"
objFSO.Close
'something something
set objFile = objFSO.OpenTextFile("somefile.txt",8,True)
objFSO.WriteLine "gfdgfdgfd"
objFSO.Close
'something else
set objFile = objFSO.OpenTextFile("somefile.txt",8,True)
objFSO.WriteLine "ddsgfgdfsgdfs"
objFSO.Close