#2144 closed Bug (No Bug)
Compiled script does not open with FILE_SHARE_DELETE
Reported by: | anonymous | Owned by: | |
---|---|---|---|
Milestone: | Component: | AutoIt | |
Version: | 3.3.9.1 | Severity: | None |
Keywords: | Cc: |
Description
I tried to implement a selfdelete using a copy of the executable in a file opend with FILE_DELETE_ON_CLOSE. When running this copy, I get the following error:
Unable to open the script file
Example script:
#include<File.au3> #region Selfdelete functions #OnAutoItStartRegister "__SelfDelete" ; Function to start self deletion Func _SelfDelete($exitCode = 0) ; by ProgAndy If Not @Compiled Then Return SetError(1, 0, 0) $sDeleteCopy = _TempFile(@TempDir, "~", ".exe") FileCopy(@ScriptFullPath, $sDeleteCopy, 1) ; Open File handle in Delete after close read access before running Local $hFile= DllCall("kernel32.dll", "handle", "CreateFileW", "wstr", $sDeleteCopy, "dword", 1, "dword", 5, "ptr", 0, "dword", 4, "dword", 0x04000100, "ptr", 0) $hFile = $hFile[0] Local $iPid = Run('"' &$sDeleteCopy & '" -selfdelete ' & @AutoItPID & ' "' & @ScriptFullPath & '"', @WorkingDir, @SW_HIDE) If @error Then DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $hFile) Return SetError(2, 0, 0) EndIf Do Sleep(100) Until ProcessExists($iPid) ; close our handle. The file will be deleted when the started process exits DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $hFile) Exit $exitCode EndFunc ; internal function Func __SelfDelete() If Not ($CMDLINE[0] = 3 And $CMDLINE[1] == "-selfdelete") Then Return ProcessWaitClose(Number($CMDLINE[2])) MsgBox(0, "-", $CMDLINE[2]) For $i = 1 To 10 Sleep(100) If FileDelete($CMDLINE[3]) Then ExitLoop Next Exit EndFunc #endregion Selfdelete functions _SelfDelete()
Attachments (0)
Change History (2)
comment:1 Changed 13 years ago by Valik
- Resolution set to No Bug
- Status changed from new to closed
comment:2 Changed 13 years ago by anonymous
I'm not sure why you are reporting this as a bug. I think that allowing the file to be deleted/renamed will break FileInstall() in cases where the file is deleted/renamed during execution.
I don't think so. The executable should still be locked while executing even if calls to CreateFile allow FILE_SHARE_DELETE.
It could have also been my PC acting up. I tried it several times with beta, stable, x86 and x64 and it did not work. Now I tried again and it runs flawlessy.
I'll try different PCs and if it doesn't work I'll consider it an AutoIt limitation.
Guidelines for posting comments:
- You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
- In-depth discussions should take place on the forum.
For more information see the full version of the ticket guidelines here.
I'm not sure why you are reporting this as a bug. I think that allowing the file to be deleted/renamed will break FileInstall() in cases where the file is deleted/renamed during execution.