[英]How to change the 'friendly label' of a volume in Windows?
我想更改此標簽:
在上圖中,我沒有任何權限就手動對其進行了更改。
我嘗試了此線程中所說的以下內容,但它給出了System.UnauthorizedAccessException
public void setVolumeLabel(String oldName, string newLabel){
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives){
if (d.IsReady && d.Name.Equals(oldName)){
d.VolumeLabel = newLabel;
}
}
因此,VolumeLabel屬性不是我想要的。 然后,我閱讀了這篇文章,但是由於某種原因無法導入Shell32.dll,它說找不到Axlmp.exe。
也嘗試過SetVolumeName() 。 它返回非零數字,但不更改VolumeName。
[DllImport("kernel32.dll", SetLastError=true)]
public static extern bool SetVolumeLabel(String letter, String label);
[DllImport("kernel32.dll")]
public static extern uint GetLastError();
當您(大概)以管理員權限登錄時,可以在資源管理器中進行編輯。 但是,除非您通過以下其中一種方法特別聲明,否則您的C#軟件不會以管理員身份運行:
1)以管理員身份運行VS
2)以管理員身份在資源管理器中運行您的應用程序
3)配置您的應用程序以通過其清單以管理員身份運行
由於DriveInfo.VolumeLabel
屬性的文檔非常清楚地說明,由於以下原因之一,可以引發UnauthorizedAccessException
:
- 在網絡或CD-ROM驅動器上設置了卷標。
- 拒絕訪問驅動器信息。
第二個是一個很好的假設。 這是威爾摩爾勛爵的回答 。 但是,您已經表明情況並非如此。
考慮到您在對驅動器J:實際上是網絡驅動器的問題的評論中已指出,因此這留下了第一個含義。 您不能使用此機制來更改網絡驅動器的標簽。
為此,您需要使用COM接口。 您將查詢外殼,以獲取一個Folder2
對象,該對象代表您希望操縱的網絡驅動器。 然后,您將使用此對象的Self
屬性來檢索文件夾的相應FolderItem
對象 。 最后,您可以直接為該對象設置Name
屬性 。
這是C ++中的解決方案 , 您已經在C#和VB 6中找到了解決方案 。 但是,您聲稱您無法按照Syberdoor的建議添加對“ Microsoft Shell控件和自動化”庫的引用。 我不確定為什么不這樣做。 您收到的錯誤消息意義不大。 AxImp.exe是標准.NET Framework安裝的一部分。 您可能做錯了。 嘗試:
我猜想如果您不安裝Windows SDK,可能會丟失AxImp.exe,而Visual Studio可能無法創建允許您使用typelib的存根程序集。 我無法想象這怎么可能發生。 如果安裝了Visual Studio,則應該已經獲得了SDK。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.