我有幾個腳本試圖訪問剪貼板。一次只能有一個腳本可以訪問剪貼板。我的解決方案不起作用。這裏是我實施的解決方案如何使用文件系統作爲信號量
- 檢查是否存在clipboardLock.txt。
- - 如果它不存在,則創建它
- - 如果它確實存在,然後等待3秒至10秒,並檢查它是否存在
這並不能很好的工作--do處理
我有幾個腳本試圖訪問剪貼板。一次只能有一個腳本可以訪問剪貼板。我的解決方案不起作用。這裏是我實施的解決方案如何使用文件系統作爲信號量
這並不能很好的工作--do處理
而不是讓腳本創建一個文件,讓他們以獨佔模式打開一個現有的文件(也就是說,沒有人可以打開它)。如果文件打開,處理可以繼續,否則腳本必須等待。
爲了獨佔方式打開文件時,您可以使用OpenTextFile打開它寫:
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set MyFile = fso.OpenTextFile(FileName, ForWriting)
一旦處理完畢,關閉文件,以便其他腳本可以嘗試打開該文件。
感謝您的更新。 –
這不適合我。我想因爲我有Windows 7 64位。我相信我讀過的地方是vbscript在64位系統上的工作方式不同 – Luke101
使用您的方法,vbscript不會阻止ForWriting並等待文件關閉。啓動以下腳本兩次...首先將msgbox「文件打開...」打開...然後重新啓動。你會得到「權限被拒絕」,第二個腳本將會中斷。在錯誤恢復下一步將打敗等待文件變得可用的目標,然後再繼續。
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個upvotes ...這可能是如何工作的?
這裏有一個工作程序 - 只是坐在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
,因爲在VBScript中沒有讀鎖(@Steve,-1),你必須寫打開信號燈文件或使用重命名來控制訪問。在這兩種情況下,你必須處理可能的錯誤您是否在腳本中捕獲錯誤? –
@ Ekkehard.Horner感謝您的反饋,我已經更新了我的答案,以便更清楚。 – Steve
做檢查然後行動(上面的步驟1和2)總是要成爲一場比賽。你應該跳過檢查,只是嘗試行爲,並適當地對錯誤做出反應。 –