Search the Community
Showing results for tags 'file lock'.
-
Hi! I made a script that reads an ini file and updates the controls background color according to the ini key value. There's another script that needs to write to that ini file, but the file is locked by this main script. The loop keeps updating the window according to the ini contents, and that generates the flickering (and stalls the gui) but it also locks the ini file for writing. I can't think of a logic that could solve my problem. I'm sorry for the big script, the UI is still a bit messed up. #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <ColorConstants.au3> #Region ### START Koda GUI section ### Form=c:\users\telmo.baia\desktop\pinshell update utility.kxf $Form1_1 = GUICreate("PinShell Update Utility", 618, 357) $MenuItem1 = GUICtrlCreateMenu("&Arquivo") $MenuItem3 = GUICtrlCreateMenuItem("Abrir arquivo de atualização", $MenuItem1) $MenuItem4 = GUICtrlCreateMenuItem("Sair", $MenuItem1) $RadioUpdAll = GUICtrlCreateRadio("Atualizar todos os micros", 16, 8, 153, 17) $RadioUpdSel = GUICtrlCreateRadio("Selecionar micros a atualizar", 16, 32, 153, 17) $iStart = GUICtrlCreateDummy() $Group1 = GUICtrlCreateGroup("OFFSET", 8, 64, 145, 265) $Check0 = GUICtrlCreateCheckbox("730", 24, 80, 39, 17) $Check1 = GUICtrlCreateCheckbox("419", 24, 96, 39, 17) $Check2 = GUICtrlCreateCheckbox("208", 24, 112, 39, 17) $Check3 = GUICtrlCreateCheckbox("702", 24, 128, 39, 17) $Check4 = GUICtrlCreateCheckbox("418", 24, 144, 39, 17) $Check5 = GUICtrlCreateCheckbox("209", 24, 160, 39, 17) $Check6 = GUICtrlCreateCheckbox("422", 24, 176, 39, 17) $Check7 = GUICtrlCreateCheckbox("218", 24, 192, 39, 17) $Check8 = GUICtrlCreateCheckbox("417", 24, 208, 39, 17) $Check9 = GUICtrlCreateCheckbox("415", 24, 224, 39, 17) $Check10 = GUICtrlCreateCheckbox("205", 24, 240, 39, 17) $Check44 = GUICtrlCreateCheckbox("999", 24, 280, 39, 17) $Label1 = GUICtrlCreateLabel("- 3R707RV-2", 64, 82, 69, 17) $Label2 = GUICtrlCreateLabel("- 4R707RV-1", 64, 98, 69, 17) $Label3 = GUICtrlCreateLabel("- 5R707", 64, 114, 45, 17) $Label4 = GUICtrlCreateLabel("- 7R707RVUV-1", 64, 130, 84, 17) $Label5 = GUICtrlCreateLabel("- 8R706UV", 64, 146, 60, 17) $Label6 = GUICtrlCreateLabel("- 9CD6UV-1", 64, 162, 64, 17) $Label7 = GUICtrlCreateLabel("- 10R701UV-1", 64, 178, 75, 17) $Label8 = GUICtrlCreateLabel("- 13CD74-6RV-1", 64, 194, 85, 17) $Label9 = GUICtrlCreateLabel("- 14R507RV-1", 64, 210, 75, 17) $Label10 = GUICtrlCreateLabel("- 15R506", 64, 226, 51, 17) $Label11 = GUICtrlCreateLabel("- 17CD102-4", 64, 242, 67, 17) GUICtrlCreateGroup("", -99, -99, 1, 1) $Group2 = GUICtrlCreateGroup("CORTE E VINCO", 160, 64, 145, 265) $Check11 = GUICtrlCreateCheckbox("522", 176, 80, 39, 17) $Check12 = GUICtrlCreateCheckbox("521", 176, 96, 39, 17) $Check13 = GUICtrlCreateCheckbox("352", 176, 112, 39, 17) $Check14 = GUICtrlCreateCheckbox("351", 176, 128, 39, 17) $Check15 = GUICtrlCreateCheckbox("350", 176, 144, 39, 17) $Check16 = GUICtrlCreateCheckbox("220", 176, 160, 39, 17) $Check17 = GUICtrlCreateCheckbox("416", 176, 176, 39, 17) $Check18 = GUICtrlCreateCheckbox("703", 176, 192, 39, 17) $Check19 = GUICtrlCreateCheckbox("214", 176, 208, 39, 17) $Check20 = GUICtrlCreateCheckbox("212", 176, 224, 39, 17) $Check21 = GUICtrlCreateCheckbox("213", 176, 240, 39, 17) $Check22 = GUICtrlCreateCheckbox("219", 176, 256, 39, 17) $Check23 = GUICtrlCreateCheckbox("731", 176, 272, 39, 17) $Check24 = GUICtrlCreateCheckbox("295", 176, 288, 39, 17) $Label16 = GUICtrlCreateLabel("- VISIO-2", 216, 82, 50, 17) $Label17 = GUICtrlCreateLabel("- VISIO-1", 216, 98, 50, 17) $Label18 = GUICtrlCreateLabel("- NOVAC-3", 216, 114, 59, 17) $Label19 = GUICtrlCreateLabel("- NOVAC-1", 216, 130, 59, 17) $Label20 = GUICtrlCreateLabel("- NOVAC-2", 216, 146, 59, 17) $Label21 = GUICtrlCreateLabel("- SPERIA-1", 216, 162, 61, 17) $Label22 = GUICtrlCreateLabel("- SPERIA-2", 216, 178, 61, 17) $Label23 = GUICtrlCreateLabel("- SP-102-5", 216, 194, 57, 17) $Label24 = GUICtrlCreateLabel("- SP-102-1", 216, 210, 57, 17) $Label25 = GUICtrlCreateLabel("- SP-102-4", 216, 226, 57, 17) $Label26 = GUICtrlCreateLabel("- SP-102-2", 216, 242, 57, 17) $Label27 = GUICtrlCreateLabel("- SP-102-3", 216, 258, 57, 17) $Label28 = GUICtrlCreateLabel("- SP-102-6", 216, 274, 57, 17) $Label29 = GUICtrlCreateLabel("- EASY", 216, 290, 41, 17) GUICtrlCreateGroup("", -99, -99, 1, 1) $Group3 = GUICtrlCreateGroup("COLAGEM", 312, 64, 145, 265) $Check25 = GUICtrlCreateCheckbox("261", 328, 80, 39, 17) $Check26 = GUICtrlCreateCheckbox("704", 328, 96, 39, 17) $Check27 = GUICtrlCreateCheckbox("264", 328, 112, 39, 17) $Check28 = GUICtrlCreateCheckbox("263", 328, 128, 39, 17) $Check29 = GUICtrlCreateCheckbox("262", 328, 144, 39, 17) $Check30 = GUICtrlCreateCheckbox("705", 328, 160, 39, 17) $Check31 = GUICtrlCreateCheckbox("421", 328, 176, 39, 17) $Check32 = GUICtrlCreateCheckbox("420", 328, 192, 39, 17) $Check33 = GUICtrlCreateCheckbox("258", 328, 208, 39, 17) $Check34 = GUICtrlCreateCheckbox("253", 328, 224, 39, 17) $Check35 = GUICtrlCreateCheckbox("255", 328, 240, 39, 17) $Check36 = GUICtrlCreateCheckbox("251", 328, 256, 39, 17) $Check37 = GUICtrlCreateCheckbox("252", 328, 272, 39, 17) $Label31 = GUICtrlCreateLabel("- EXPERT-3", 368, 82, 65, 17) $Label32 = GUICtrlCreateLabel("- EXPERT-5", 368, 98, 65, 17) $Label33 = GUICtrlCreateLabel("- EXPERT-1", 368, 114, 65, 17) $Label34 = GUICtrlCreateLabel("- EXPERT-2", 368, 130, 65, 17) $Label35 = GUICtrlCreateLabel("- EXPERT-4", 368, 146, 65, 17) $Label36 = GUICtrlCreateLabel("- EXPERT-6", 368, 162, 65, 17) $Label37 = GUICtrlCreateLabel("- AM-105-1", 368, 178, 59, 17) $Label38 = GUICtrlCreateLabel("- AM-105-2", 368, 194, 59, 17) $Label39 = GUICtrlCreateLabel("- MD-100-1", 368, 210, 60, 17) $Label40 = GUICtrlCreateLabel("- MD-68-1", 368, 226, 54, 17) $Label41 = GUICtrlCreateLabel("- MD-45-1", 368, 242, 54, 17) $Label47 = GUICtrlCreateLabel("- RICALL", 368, 258, 50, 17) $Label49 = GUICtrlCreateLabel("- BABY", 368, 274, 41, 17) GUICtrlCreateGroup("", -99, -99, 1, 1) $Group4 = GUICtrlCreateGroup("HOT-STAMP", 464, 64, 145, 89) $Check38 = GUICtrlCreateCheckbox("230", 480, 80, 39, 17) $Check39 = GUICtrlCreateCheckbox("424", 480, 96, 39, 17) $Check40 = GUICtrlCreateCheckbox("425", 480, 112, 39, 17) $Label42 = GUICtrlCreateLabel("- STEUER", 520, 82, 57, 17) $Label43 = GUICtrlCreateLabel("- FURNAX-HS", 520, 98, 75, 17) $Label44 = GUICtrlCreateLabel("- FURNAX-HS-2", 520, 114, 84, 17) GUICtrlCreateGroup("", -99, -99, 1, 1) $Group5 = GUICtrlCreateGroup("VERNIZ", 464, 152, 145, 89) $Check41 = GUICtrlCreateCheckbox("291", 480, 168, 39, 17) $Check42 = GUICtrlCreateCheckbox("290", 480, 184, 39, 17) $Label45 = GUICtrlCreateLabel("- VERCAL-1", 520, 170, 64, 17) $Label46 = GUICtrlCreateLabel("- VERCAL-2", 520, 186, 64, 17) GUICtrlCreateGroup("", -99, -99, 1, 1) $Group6 = GUICtrlCreateGroup("MANUTENÇÃO", 464, 240, 145, 89) $Check43 = GUICtrlCreateCheckbox("MICRO0177", 480, 256, 80, 17) GUICtrlCreateGroup("", -99, -99, 1, 1) $iEnd = GUICtrlCreateDummy() $ButtonUpdate = GUICtrlCreateButton("Atualizar", 464, 10, 147, 35) $ButtonCleanSel = GUICtrlCreateButton("Limpar seleção", 180, 27, 80, 25) GUICtrlSetState($ButtonCleanSel, $GUI_DISABLE); ###################################################### HABILITAR BOTÃO DE LIMPAR SELEÇÃO SÓ QUANDO ATUALIZAR TODOS NÃO ESTIVER SELECIONADO E NENHUMA SELEÇÃO FEITA GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### $Shell = "PinShell" $PUUFile = "PUU.dat" $PUUPath = "M:\vm2\" & $Shell & "\" & $Shell & "\" $PUU = $PUUPath & $PUUFile ;~ local CheckStatus() CheckStatus() While 1 CheckStatus() $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $MenuItem4 Exit Case $MenuItem3 Run ( "notepad.exe " & $PUUFile, $PUUPath) Case $RadioUpdAll For $i = $iStart To $iEnd GUICtrlSetState($i, $GUI_DISABLE) Next ;~ IniWrite($PUU, "MTU Selection", "ALL", "1") Case $RadioUpdSel For $i = $iStart To $iEnd GUICtrlSetState($i, $GUI_ENABLE) Next Case $ButtonUpdate If GUICtrlRead($RadioUpdAll) = 1 Then IniWrite($PUU, "MTU Selection", "ALL", "1") If IniRead($PUU, "MTU Selection", "ALL", "") = 1 Then MsgBox(64, "Informação", "Definida atualização geral automatica.") EndIf ElseIf GUICtrlRead($RadioUpdSel) = 1 Then For $1 = 0 To 44 ; ######################################### ALTERAR NÚMERO DE ACORDO COM AS CHECKBOXES (MÁQUINAS) EXISTENTES If GUICtrlRead(Eval('Check' & $1)) = 1 Then IniWrite($PUU, "MTU Selection", GUICtrlRead(Eval('Check' & $1), 1), "1") If GUICtrlRead(Eval('Check' & $1)) <> 1 Then IniWrite($PUU, "MTU Selection", GUICtrlRead(Eval('Check' & $1), 1), "0") Next IniWrite($PUU, "MTU Selection", "ALL", "0") If IniRead($PUU, "MTU Selection", "ALL", "") = 0 Then MsgBox(64, "Informação", "Definidos micros para atualizar automaticamente.") EndIf EndIf EndSwitch WEnd Func CheckStatus() For $1 = 0 To 44 ; ######################################### ALTERAR NÚMERO DE ACORDO COM AS CHECKBOXES (MÁQUINAS) EXISTENTES If IniRead($PUU, "MTU Selection", GUICtrlRead(Eval('Check' & $1), 1), "") = 1 Then GUICtrlSetState(Eval('Check' & $1), $GUI_CHECKED) Next For $1 = 0 To 44 ; ######################################### ALTERAR NÚMERO DE ACORDO COM AS CHECKBOXES (MÁQUINAS) EXISTENTES If IniRead($PUU, "MTU Selection", GUICtrlRead(Eval('Check' & $1), 1), "") = "A" Then DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", Eval('Check' & $1), "wstr", 0, "wstr", 0) GUICtrlSetBkColor(Eval('Check' & $1), $COLOR_GREEN) EndIf Next For $1 = 0 To 44 ; ######################################### ALTERAR NÚMERO DE ACORDO COM AS CHECKBOXES (MÁQUINAS) EXISTENTES If IniRead($PUU, "MTU Selection", GUICtrlRead(Eval('Check' & $1), 1), "") = "N" Then DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", Eval('Check' & $1), "wstr", 0, "wstr", 0) GUICtrlSetBkColor(Eval('Check' & $1), $COLOR_RED) EndIf Next If IniRead($PUU, "MTU Selection", "ALL", "") = 1 Then GUICtrlSetState($RadioUpdAll, $GUI_CHECKED) For $i = $iStart To $iEnd GUICtrlSetState($i, $GUI_DISABLE) Next Else GUICtrlSetState($RadioUpdSel, $GUI_CHECKED) For $i = $iStart To $iEnd GUICtrlSetState($i, $GUI_ENABLE) Next EndIf EndFunc
-
Hello, When new versions e.g. of your compiled script cannot be replaced on the server, as they are in use, you can use this script to manage to close the open handles and to replace the old file with your new version. ; Autoit v3.3.14.5 #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Description=Close OpenFileHandlles, replace file on Server with a new version #AutoIt3Wrapper_Res_Fileversion=1 #AutoIt3Wrapper_Res_LegalCopyright=(c) 2019 by Rudolf Thilo, IT-Beratung Rudolf Thilo #AutoIt3Wrapper_Res_SaveSource=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <GUIConstantsEx.au3> #include <NetShare.au3> #include <WindowsConstants.au3> #include <Array.au3> #include <EditConstants.au3> ; Enumerate open files on the server $DragDropOpenFile = "<drag-drop file locked on Server to be closed and replaced>" $DragDropNewFile = "<drag-drop file to replace the one on the server>" $NewFile = "" $Gui_h = 250 $Gui_w = 800 $vDist = 7 ; GUICreate($GuiTitle, $w, $h, @DesktopWidth - $w - 100, @DesktopHeight - $h - 60, -1, $WS_EX_ACCEPTFILES) ; generally enable drag-drop for files into other GUI controls $myGui = GUICreate("force close of all NETWORK opened file handles", $Gui_w, $Gui_h, 100, 100, -1, $WS_EX_ACCEPTFILES) $InputFileToClose = GUICtrlCreateInput($DragDropOpenFile, 20, $vDist, $Gui_w - 40, 20) GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; allow drag-droping files for this control, $InputFile Opt("Guicoordmode", 2) $InputFileNew = GUICtrlCreateInput($DragDropNewFile, -1, $vDist) GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; allow drag-droping files for this control, $InputFile GUICtrlSetState(-1, $GUI_DISABLE) $lServer = GUICtrlCreateLabel("<server>", -1, $vDist) $lShare = GUICtrlCreateLabel("<share>", -1, $vDist) $lPath = GUICtrlCreateLabel("<path>", -1, $vDist) $lFile = GUICtrlCreateLabel("<file>", -1, $vDist) $doit = GUICtrlCreateButton("search for and close open file handles", -1, $vDist) GUICtrlSetState(-1, $GUI_DISABLE) $exit = GUICtrlCreateButton("cancel", -1, $vDist) GUISetState() $FN = False $FNnew = "" $FNmatch = False $ToolTitle = "" $ToolTxt = "" While 1 $input = GUICtrlRead($InputFileToClose) If $input <> $DragDropOpenFile Then ; da wurde was reingezogen $DragDropOpenFile = $input If StringLeft($input, 2) = "\\" Then $Type = "UNC" $ServerShareUNC = StringLeft($input, StringInStr($input, "\", 0, 4) - 1) $fRelPathFN = StringReplace($input, $ServerShareUNC, "") $fPath = StringLeft($fRelPathFN, StringInStr($fRelPathFN, "\", 0, -1)) $FN = StringTrimLeft($fRelPathFN, StringInStr($fRelPathFN, "\", 0, -1)) ElseIf StringMid($input, 2, 1) = ":" Then ; Pfad mit Laufwerksbuchstabe, evtl. Netzwerk Mapping (erforderlich) $drive = StringLeft($input, 2) $Type = DriveGetType($drive) If $Type = "Network" Then $ServerShareUNC = DriveMapGet($drive) $foo = StringReplace($input, $drive, $ServerShareUNC) ; Laufwerkspfad in UNC Pfad umwandeln $fRelPathFN = StringReplace($foo, $ServerShareUNC, "") $fPath = StringLeft($fRelPathFN, StringInStr($fRelPathFN, "\", 0, -1)) $FN = StringTrimLeft($fRelPathFN, StringInStr($fRelPathFN, "\", 0, -1)) Else MsgBox(0, @ScriptLineNumber, "This script can *ONLY* close open file handles on NETWORK SHARES!" & @CRLF & _ $input & @CRLF & _ $drive & " = " & $Type) ContinueLoop 2 EndIf EndIf $Server = StringLeft($ServerShareUNC, StringInStr($ServerShareUNC, "\", 0, 3) - 1) $Share = StringTrimLeft($ServerShareUNC, StringInStr($ServerShareUNC, "\", 0, 3) - 1) GUICtrlSetData($lServer, $Server) GUICtrlSetData($lShare, $Share) GUICtrlSetData($lPath, $fPath) GUICtrlSetData($lFile, $FN) GUICtrlSetState($doit, $GUI_ENABLE) GUICtrlSetState($InputFileNew, $GUI_ENABLE) EndIf If $NewFile <> GUICtrlRead($InputFileNew) Then $NewFile = GUICtrlRead($InputFileNew) If $NewFile <> $DragDropNewFile Then If StringInStr($NewFile, $DragDropNewFile) Then $NewFile = StringReplace($NewFile, $DragDropNewFile, "") GUICtrlSetData($InputFileNew, $NewFile) EndIf $FNnew = StringTrimLeft($NewFile, StringInStr($NewFile, "\", 0, -1)) If $FN = $FNnew Then If $FNmatch = False Then $FNmatch = True GUICtrlSetData($doit, "Search for open file handles, close them, overwrite old file.") EndIf Else If $FNmatch Then $FNmatch = False GUICtrlSetData($doit, "Search for open file handles and close them.") GUICtrlSetData($InputFileNew,$DragDropNewFile) EndIf EndIf EndIf EndIf Switch GUIGetMsg() Case $exit, $GUI_EVENT_CLOSE GUIDelete($myGui) Exit Case $doit AbArbeiten($Server, $Share, $fPath, $FN) EndSwitch WEnd Func AbArbeiten($_Srv, $_Shr, $_fPth, $_fNme) Local $iID = 0 Local $iRights = 1 Local $iLckCount = 2 Local $iFPFN = 3 Local $iUser = 4 ConsoleWrite($_fPth & $_fNme & @CRLF) Local $aFile = _Net_Share_FileEnum($_Srv) If IsArray($aFile) Then ; _ArrayDisplay($aFile) Local $x $ToolTxt = "Open Handles:" $ToolTitle = $aFile[0][0] & " handles still waiting to be checkt..." UpdateToolTip() AdlibRegister(UpdateToolTip, 1000) For $x = $aFile[0][0] To 1 Step -1 $ToolTitle = $x & " handles waiting to be checked..." If Not StringInStr($aFile[$x][$iFPFN], $_fPth & $_fNme) Then ; ConsoleWrite("Nix Enthalten in: " & $aFile[$x][$iFPFN] & @CRLF) _ArrayDelete($aFile, $x) Else $ToolTxt &= @CRLF & $aFile[$x][$iFPFN] & ", User = " & $aFile[$x][$iUser] ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ToolTxt = ' & $ToolTxt & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console EndIf Next $aFile[0][0] = UBound($aFile) - 1 _ArraySort($aFile, 0, 1, 0, $iUser) ; _ArrayDisplay($aFile, $aFile[0][0] & " FileLocks found.") If $aFile[0][0] = 0 Then $ToolTitle = "Done. No open handles coud be found." $ToolTxt &= @CRLF & "Nothing to be closed!" Sleep(2000) $ToolTxt = "" Else $ToolTitle = $aFile[0][0] & " Handles found to be closed..." $CloseErr = 0 For $x = 1 To $aFile[0][0] If _Net_Share_FileClose($Server, $aFile[$x][$iID]) Then $ToolTxt &= @CRLF & @TAB & "Handle closed: " & $aFile[$x][$iID] Else $ToolTxt &= @CRLF & "ERROR: Handle Close Failed! --> " & $aFile[$x][$iFPFN] & ", User = " & $aFile[$x][$iUser] $CloseErr += 1 EndIf Next ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $CloseErr = ' & $CloseErr & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console If $CloseErr = 0 Then $ToolTitle = "Alle open handles were closed successfully." If FileExists($NewFile) Then If FileCopy($NewFile, $input, 1 + 8) Then $ToolTitle = "File could be replaced." $ToolTxt = "done" Else $ToolTitle = "File could *NOT* be replaced" $ToolTxt = "Most propably a newly open file handle was created while this script was running." & @CRLF & _ "Just start over again." EndIf EndIf Else $ToolTitle = $CloseErr & " handles could *NOT* be closed!" Sleep(2000) EndIf Sleep(1000) $ToolTxt = "" $ToolTitle = "" EndIf Else MsgBox(0, "not an array", $aFile & @CRLF & @error & @CRLF & @extended) EndIf EndFunc ;==>AbArbeiten Func UpdateToolTip() ToolTip($ToolTxt, MouseGetPos(0) + 20, MouseGetPos(1) + 20, $ToolTitle) ; ConsoleWrite( $ToolTxt & @CRLF & $ToolTitle & @CRLF & "-------------------" & @CRLF) EndFunc ;==>UpdateToolTip Rudi.