c # - Omdøb et kortlagt drev med shell API

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan kan jeg ændre det venlige navn på et kortlagt drev ved hjælp af Windows Shell API og C #? Mit egentlige problem er, at jeg beskæftiger mig med et diskonteret netværksdrev uden en UNC-sti, så den eneste måde at omdøbe den på er fra Explorer, men jeg vil gerne gøre det programmelt.

Bedste reference


Jeg havde et lignende problem og løst det ved hjælp af følgende kode:


Shell32.Shell shell = new Shell32.Shell();
((Shell32.Folder2)shell.NameSpace("X:")).Self.Name = "Friendly Label";


Med henvisning til COM -> Microsoft Shell Controls og Automation.
Det er grundlæggende C # -repræsentationen af ​​en gammel VBS-kode, jeg havde


Set oShell = CreateObject("Shell.Application")
oShell.NameSpace("X:").Self.Name = "Friendly Label"


Forskellen er imidlertid, at C # implementeringen af ​​NameSpace af en eller anden grund returnerer et mappeobjekt, mens alle VB-implementeringer ser ud til at returnere en mappe2-genstand. Kun mappen2 har egenskaben 'Egen', så den ekstra cast er nødvendig. [5] [6]


Som det blev påpeget i en af ​​kommentarerne, fungerer dette kun i en STA-lejlighed, så Main () -metoden skal dekoreres med [[STAThread]].


Jeg håber, det er ikke dårlig praksis at besvare sådanne gamle spørgsmål, men jeg var meget frustreret over at finde en løsning på dette overalt.

Andre referencer 1


Du skal bruge API'en SetVolumeLabel. [7]


Dybest set er drevets navn, som du henviser til, kaldet volumenetiketten. Du kan P/Invoke API'en og ændre den på den måde.


For at få udvidet fejlinformation, kan du bruge GetLastError. [8]

Andre referencer 2


System.IO.DriveInfo har en egenskab VolumeLabel, som giver dig mulighed for at ændre etiketten på dine volumener. Kontroller undtagelserne og bemærkningerne på VolumeLabel for at se kravene til omdøbning af et volumen. [9] [10]


Det ser ud til, at du ikke kan omdøbe UNC, medmindre du kortlægger det som et netværksdrev. Du kan også oprette en genvej til UNC og omdøbe det også.