VBScript - 多重実行を禁止する
VBScript - 多重実行を禁止する
こちらの記事で WMI を使ってスクリプトの多重実行を禁止する方法を紹介しました。
しかしこの方法では Enter キーの連打等によって短時間に複数実行された場合、どちらも実行中と判定されてしまう問題がありました。
今回は WMI ではなく一時ファイルを使って、スクリプトの多重実行を禁止してみます。
サンプルスクリプト
次のスクリプトは、スクリプトの多重実行を禁止します。
一時ファイルの作成を試し、ファイルが作成できたらメインの処理を実行します。
作成できなければエラーメッセージを表示して終了します。
With CreateObject("Scripting.FileSystemObject")
Dim lockFilePath
lockFilePath = .BuildPath( .GetSpecialFolder(2), WScript.ScriptName & ".lock" )
On Error Resume Next
With .OpenTextFile(lockFilePath, 2, True)
If Err.Number <> 0 Then
WScript.Echo "Error 1 # " & CStr(Err.Number) & " : " & Err.Description
WScript.Quit 1
End If
'TODO: ここにメイン処理を書く
If Err.Number <> 0 Then
'TODO: メイン処理のエラー処理を書く
'TODO: 一時ファイルを削除したいのでここでは Quit しないこと
End If
End With
On Error GoTo 0
On Error Resume Next
.DeleteFile lockFilePath, True
If Err.Number <> 0 Then
WScript.Echo "Error 2 # " & CStr(Err.Number) & " : " & Err.Description
WScript.Quit 1
End If
On Error GoTo 0
End With
サンプルスクリプトの説明
まずは一時ファイルのパスを設定します。
Temp フォルダ配下にスクリプト名+ “.lock” の名前とします。
lockFilePath = .BuildPath( .GetSpecialFolder(2), WScript.ScriptName & ".lock" )
続けて一時ファイルの作成を試みます。
一時ファイル作成に成功した場合(→スクリプトを誰も実行していないとき)はメイン処理を行います。
作成に失敗した場合(→誰かがスクリプトを実行中のとき)は、エラーメッセージを表示してスクリプトを終了します。
With .OpenTextFile(lockFilePath, 2, True)
If Err.Number <> 0 Then
WScript.Echo "Error 1 # " & CStr(Err.Number) & " : " & Err.Description
WScript.Quit 1
End If
'TODO: ここにメイン処理を書く
最後に、メイン処理が終わったら一時ファイルを削除します。
*消さなくても特に問題はありませんが念のため。
.DeleteFile lockFilePath, True
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。
この記事にコメントをしてみませんか?