使用shell API重命名映射的驱动器

时间:2011-08-16 13:55:02

标签: c# windows shell drive network-drive

如何使用Windows shell API和C#更改映射驱动器的友好名称?我的实际问题是我正在处理没有UNC路径的已被删除的网络驱动器,因此重命名它的唯一方法是从Explorer,但我想以编程方式执行此操作。

3 个答案:

答案 0 :(得分:3)

我遇到了类似的问题并使用以下代码解决了这个问题:

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

引用COM - > Microsoft Shell控件和自动化。 它基本上是我用过的旧VBS代码的C#表示

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

然而,区别在于NameSpace的C#实现由于某种原因返回folder object,而所有VB实现似乎都返回folder2 object。只有folder2才有自己的'属性,所以需要额外的演员阵容。

另外,正如其中一条评论所指出的,这只适用于STA公寓,因此Main()方法必须用[STAThread]进行修饰。

我希望回答这些陈旧的问题并不是一种糟糕的做法,但我对在任何地方都找不到解决方案感到非常沮丧。

答案 1 :(得分:0)

您应该使用SetVolumeLabel API。

基本上,您所指的驱动器“名称”称为卷标。您可以P / Invoke API并以这种方式进行更改。

要获取扩展错误信息,您可以使用GetLastError

答案 2 :(得分:0)

System.IO.DriveInfo有一个属性VolumeLabel,可让您更改卷上的标签。检查VolumeLabel上的例外和备注,以查看重命名卷的要求。

除非您将其映射为网络驱动器,否则看起来您无法直接重命名UNC。您还可以创建UNC的快捷方式,并将其重命名。