3

クリップボードにアクセスしようとしているスクリプトがいくつかあります。一度に1つのスクリプトだけが、一度にクリップボードにアクセスできます。私の解決策はうまくいきませんでした。これが私が実装したソリューションです

  • clipboardLock.txtが存在するかどうかを確認してください。
  • -存在しない場合は作成します
  • --プロセスを実行します
  • -存在する場合は、3秒から10秒待って、存在するかどうかを確認します

2つのスクリプトがファイルを作成しようとしてエラーが発生したため、これはうまく機能しませんでした。1つのスクリプトだけがクリップボードにアクセスできることを保証する手法はありますか?また、私はデータベースにアクセスできません。

4

2 に答える 2

4

スクリプトにファイルを作成させる代わりに、既存のファイルを排他モードで開かせます(つまり、他の誰もそのファイルを開くことができません)。ファイルが開いている場合は処理を続行できます。それ以外の場合、スクリプトは待機する必要があります。

ファイルを排他的に開くには、OpenTextFileを使用してファイルを開いて書き込みます。

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set MyFile = fso.OpenTextFile(FileName, ForWriting)

処理が完了したら、ファイルを閉じて、他のスクリプトがファイルを開こうとすることができるようにします。

于 2013-01-09T07:20:52.097 に答える
0

メソッドを使用すると、vbscriptはForWritingをブロックせず、ファイルが閉じられるまで待機します。次のスクリプトを2回起動します...最初にmsgbox"FileOpen ..."を開いたままにします...次に、もう一度起動します。「PermissionDenied」が表示され、2番目のスクリプトが壊れます。エラー時にレジュームネクストは、続行する前にファイルが使用可能になるのを待つという目的を無効にします。

Const ForReading = 1, ForWriting = 2, ForAppending = 8 
Set filesys = CreateObject("Scripting.FileSystemObject") 
Set filetxt = filesys.OpenTextFile("c:\somefile.txt", ForWriting, True) 
wscript.echo "File Open..."
filetxt.Close
wscript.echo "Done..."

だから私は4つの賛成票があるのを見ます...これはおそらくどのように機能しましたか?

これが作業ルーチンです-ファイルが利用可能になるまでwhileループに座ってください:

lockFile

sub lockFile ()
    Dim fso, LockFile, LockFileName, done
    Const ForWriting = 2

    LockFileName = "C:\somefile.lck"
    Set filesys = CreateObject("Scripting.FileSystemObject") 
    done = false
    on error resume next 'need to evaluate error 

    while (not(done))
        err.clear
        Set filetxt = filesys.OpenTextFile(LockFileName, ForWriting, True) 
        if (err.number = 0) then 
            done = true
        else
            done = false
        end if
        wscript.echo "Error [0=file open, 70=file in use] : " & err.number
        wscript.sleep(1000) 'wait one second instead of chewing up CPU
    wend

    wscript.echo "File Open..."
    filetxt.Close
    wscript.echo "Done..."

    on error goto 0 'reset error level

end sub
于 2016-03-18T18:37:40.623 に答える