OK, so funktioniert es wirklich besser. Meine Procedure zum "sich selbst Löschen" sieht jetzt so aus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| procedure TFormKonfiguration.Deinstallieren(Sender: TObject); var VUninstaller : textfile; VUninstallerInhalt : Array [0..4] of string; begin VUninstallerInhalt[0] := 'ECHO OFF'; VUninstallerInhalt[1] := ':WAIT'; VUninstallerInhalt[2] := 'DEL ' + paramstr(0) + ' /f'; VUninstallerInhalt[3] := 'IF EXIST ' + paramstr(0) + ' GOTO WAIT'; VUninstallerInhalt[4] := 'DEL ' + paramstr(0) + '_h5g8sh39kghdbejtr5h2.bat' + ' /f'; createFile( PChar(paramstr(0) + '_h5g8sh39kghdbejtr5h2.bat'), GENERIC_READ and GENERIC_WRITE, 0, nil, CREATE_NEW, FILE_FLAG_OVERLAPPED, 0); assignfile( VUninstaller, PChar(paramstr(0) + '_h5g8sh39kghdbejtr5h2.bat')); rewrite(VUninstaller); write(VUninstaller,VUninstallerInhalt[0]); writeLn(VUninstaller); write(VUninstaller,VUninstallerInhalt[1]); writeLn(VUninstaller); write(VUninstaller,VUninstallerInhalt[2]); writeLn(VUninstaller); write(VUninstaller,VUninstallerInhalt[3]); writeLn(VUninstaller); write(VUninstaller,VUninstallerInhalt[4]); closefile(VUninstaller); shellExecute( Handle, 'open', PChar(paramstr(0) + '_h5g8sh39kghdbejtr5h2.bat'), nil, nil, SW_MINIMIZE); close; end; |
CreateFile kann man glaub' ich auch weglassen.
Jedoch fände ich es sinvoll, im Uninstaller-Menü auch anzubieten, dass der Schoner nur aus dem Menü gelöscht wird, die Datei aber bestehen bleibt. Nur wo ist diese Liste? Hab' mal die entsprechende rundll.exe mit RegSpy untersucht, aber von Bildschirmschonern keine Spur...
Dafür habe ich den Schlüssel
HKEY_CURRENT_USER\Control Panel entdeckt. Darin speichern auch einige Schoner ihre Einstellungen, so auch Starfield.