In Win32 ist das aktuelle Arbeitsverzeichnis des Hauptthreads auf den Speicherort festgelegt, von dem die ausführbare Datei gestartet wurde. Mein Problem ist, dass selbst nach einem Aufruf an SetCurrentDirectory() zu woanders, der Prozess anscheinend immer noch ein Dateisystem-Objekt verweist dieses anfängliche Startverzeichnis (verifizierbar mit einem Tool wie Process Explorer) - was bedeutet, dass dieser Direktor nicht gelöscht werden kann verarbeiten.Win32-aktuelles Verzeichnis, Sperren und Shell-Integration
Kennt jemand hier eine nicht zu hacky Lösung? Ich bin speziell auf das Problem mit einem Programm, das in Explorer integriert (Hinzufügen eines Verbs zu HKCR \ Directory \ Shell-Registrierungsschlüssel), muss ich Dateien in einem Verzeichnis mit der rechten Maustaste und das Entfernen des Quellverzeichnisses, was unmöglich ist zu verarbeiten Da das anfängliche Arbeitsverzeichnis auf festgelegt ist, haben Sie es erraten, das Verzeichnis mit der rechten Maustaste.
BEARBEITEN: Ich werde für den Ansatz "Hilfshilfe Start-von-gesund-Verzeichnis" gehen. Es ist vielleicht nicht sehr elegant, aber es wird funktionieren und erfordert keine fiesen Hacks.
Sind Sie sicher, dass der Prozess nicht einen Verweis auf sich selbst, sondern das Verzeichnis enthält? –
Ja, um sicher zu sein, machte ich ein einfaches Programm, das nichts außer SetCurrentDirectory() gefolgt von einer MessageBox() - die hält das Verzeichnis gesperrt :( – snemarch
retag: hinzugefügt win32, entfernt aktuelle. Aktuelle ist nutzlos als Tag. – George