vielleicht kennt jemand von euch ja einen (anderen, nicht im Folgenden
beschriebenen) Weg, gesperrte Dateien oder Verzeichnisse mit Bordmitteln
(beim Reboot) zu verschieben oder umzubennenen.
BTW: das Loeschen gesperrter Dateien mit Bordmitteln ist einfach.
--- *.INF ---
[Version]
Signature="$CHICAGO$"
[DefaultInstall]
DelFiles=DelFiles
[DelFiles]
filename.ext,,,1
[DestinationDirs]
DelFiles=DIRID,"subdir"
--- EOF ---
Diese *.INF per
RunDll32.Exe SetupAPI.Dll,InstallHinfSection DefaultInstall 4 *.INF
ausfuehren, den Prompt zum Reboot bejahen und weg ist die Datei.
*.INF kennt zwar auch ein [RenFiles], aber das kann nur ungesperrte
Dateien im gleichen Verzeichnis umbenennen.
Jetzt die Probleme zu den drei mir eingefallenen Loesungen mit
Bordmitteln und den "PendingFileRenameOperations":
1.
Reg.Exe Add "HKLM\System\CurrentControlSet\Control\Session Manager" /V "PendingFileRenameOperations" /T REG_MULTI_SZ /D
"\??\<alterPfad>\0\??\<neuerPfad>"
erfuellt das gewuenschte Verschieben von Dateien/Verzeichnissen;
ABER: dieser Aufruf von REG.EXE ueberschreibt evtl. bestehende
Eintraege (wenn auch nach Prompt), ist also nicht allgemein(*)
brauchbar;
2.
--- *.INF ---
[Version]
Signature="$CHICAGO$"
[DefaultInstall]
AddReg=AddReg
[AddReg]
HKLM,"System\CurrentControlSet\Control\Session Manager","PendingFileRenameOperations",0x00010002,"\??\<alterPfad>","\??\<neuerPfad>"
--- EOF ---
erfuellt das gewuenschte Verschieben von Dateien/Verzeichnissen;
ABER: da der Eintrag nur ueberschrieben wird, wenn er nicht existiert,
ist diese Loesung nicht allgemein brauchbar;
3.
--- *.INF ---
[Version]
Signature="$CHICAGO$"
[DefaultInstall]
AddReg=AddReg
[AddReg]
HKLM,"System\CurrentControlSet\Control\Session Manager","PendingFileRenameOperations",0x00010008,"\??\<alterPfad>"
HKLM,"System\CurrentControlSet\Control\Session Manager","PendingFileRenameOperations",0x00010008,"\??\<neuerPfad>"
--- EOF ---
ergaenzt zwar wie gewuenscht ein Paaerchen von Pfadnamen, ABER: ist
unter "PendingFileRenameOperations" eine Loeschoperation eingetragen
(bei der der zweite Pfadname eines Paaerchens LEER ist), dann wird
das neue Paaerchen VOR diesem leeren Pfadnamen eingetragen, und damit
"\??\<alterPfad>" zum ZIEL der vorher zu loeschenden Datei (dem Ziel
passiert hier beim Reboot nichts, da dieses nicht mittels "!\??\" zum
Ueberschreiben freigegeben wird), UND alle folgenden Paaerchen
geloescht, d.h. "PendingFileRenameOperations" wird zerstoert (was kein
Wunder ist, denn wer auch immer bei MOFT sich diese Struktur ausgedacht
hat, hat "list of null-terminated strings" ganz offensichtlich nicht
verstanden).
Gibt's irgendeine andere, allgemein verwendbare Loesung (ausser
while exist "PendingFileRenameOperations" do Reboot(); end while
PendingFileRenameOperations=...
Reboot())?
mfg
Stefan
* REG.EXE Query "HKLM\System\CurrentControlSet\Control\Session Manager" /V "PendingFileRenameOperations"
If "%ERRORLEVEL%" == 0 Goto :EOF
kann feststellen, ob der Eintrag schon existiert (und damit nicht-
leer ist), verhilft aber auch zu keiner allgemein brauchbaren Loesung.
[
--
Die unaufgeforderte Zusendung werbender E-Mails verstoesst gegen �823
Abs. 1 sowie �1004 Abs. 1 BGB und begruendet Anspruch auf Unterlassung.
Beschluss des OLG Bamberg vom 12.05.2005 (AZ: 1 U 143/04)