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

本文关键字:驱动器 映射 重命名 shell API 使用 | 更新日期: 2023-09-27 18:05:58

如何使用Windows shell API和c#更改映射驱动器的友好名称?我的实际问题是,我正在处理一个没有UNC路径的断开的网络驱动器,所以重命名它的唯一方法是从资源管理器,但我想以编程方式做到这一点。

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

我有一个类似的问题,并使用以下代码解决了它:

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

参考COM -> Microsoft Shell Controls and Automation。它基本上是我拥有的旧VBS代码的c#表示

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

然而,不同之处在于,由于某种原因,c#实现的NameSpace返回一个文件夹对象,而所有VB实现似乎都返回一个folder2对象。只有文件夹2有'Self'属性,所以需要额外的强制转换。

而且,正如在一个评论中指出的那样,这只在STA公寓中工作,所以Main()方法必须用[STAThread]来装饰。

我希望回答这些老问题不是坏习惯,但是我很沮丧,因为我在任何地方都找不到解决方案。

您应该使用SetVolumeLabel API。

基本上,您所指的驱动器的"名称"称为卷标。你可以P/调用API,然后按这种方式修改它。

要获得扩展的错误信息,可以使用GetLastError

System.IO。DriveInfo有一个属性VolumeLabel,可以让你改变卷上的标签。查看VolumeLabel中的异常和备注,了解重命名卷的要求。

看起来你不能直接重命名UNC,除非你把它映射成一个网络驱动器。您也可以为UNC创建一个快捷方式并将其重命名。