I am writing my own (un)install "Install_ProgName.exe".
So far the installer is without any problem.
The "Uninstaller" (Uninstall_ProgName.exe) is.
It seems to be state of the art that the executing file and the uninstall file are in the same folder.
Uninstall deletes all files in the folder e.g. C:\Program Files\ProgName\. -ok.
But how do I "convince" the uninstaller to finally kill itself and the folder it is in.
Someone could give me a hint ?
Copy the uninstaller to C:\temp, then launch it from there.
Windows doesn't particularly like what you want to do, that's why they made it difficult...
Hi JJ,
Do you mean, the INSTALL copies the UNINSTALL to a different folder?
I was thinking on that, because it is no deal to delete the installfolder from outside.
But - as i said - ... all installed software on my computer has the 2 files in the same folder.
The only real problem is that the uninstaller itself is locked when you use it, so you can't delete it, and subsequently the whole folder cannot be deleted. That is why you must launch it from outside. Example with some error checking:
include \masm32\MasmBasic\MasmBasic.inc ; download (http://masm32.com/board/index.php?topic=94.0)
SetGlobals Src$, Dest$, Kill$
Init
.if Instr_(CL$(), "@")
inc eax
Let Kill$=eax
MsgBox 0, Kill$, "Kill that file?", MB_OKCANCEL
.if eax==IDOK
invoke SetLastError, 0
Kill Kill$
deb 4, "Killed", $Kill$, $Err$()
.endif
.else
Let Src$=CL$(0) ; arg 0 is the exe itself
.if Rinstr(Src$, "\")
xchg eax, ecx
Let Dest$=Cat$(ExpandEnv$("%TMP%")+ecx)
PrintLine "Src:", Tb$, Src$
PrintLine "Dest:", Tb$, Dest$
invoke CopyFile, Src$, Dest$, 0
deb 4, "CopyFile", eax, $Err$()
Launch Cat$(Dest$+" @"+Src$), SW_RESTORE, 1
PrintLine "Bye"
.endif
.endif
Exit
end start
JJ,
yes - nicely done. Kills the uninstallfile. But...
It works from outside - that is, it does not kill itself, but the copy kills the original file.
And this copy stays in the tmpFolder.
I am debugging professional uninstallers.
May be I'll find out, how they do it.
Quote from: clamicun on August 11, 2015, 12:06:50 AM
And this copy stays in the tmpFolder.
Right. This is normally not a problem, if users delete their tmp stuff regularly.
You may test this:
include \masm32\MasmBasic\MasmBasic.inc ; download (http://masm32.com/board/index.php?topic=94.0)
Init
Print CL$(0)
invoke SetLastError, 0
invoke MoveFileEx, CL$(0), 0, MOVEFILE_DELAY_UNTIL_REBOOT
deb 4, "MFX", eax, $Err$()
Exit
end startCL$(0) is the current executable. Reboot and check if it's still there...
JJ,
ofcourse it works - as everything you write.
"This is normally not a problem, if users delete their tmp stuff regularly."
That's no problem for you and me.
But you know that 90% of all WindowsUsers on this planet do not have the slightest idea, what they are doing.