#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 14 years ago by Valik
- Resolution set to No Bug
- Status changed from new to closed
comment:2 Changed 14 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.