簡體   English   中英

如何在Windows中更改卷的“友好標簽”?

[英]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安裝的一部分。 您可能做錯了。 嘗試:

  1. 在解決方案資源管理器中右鍵單擊該項目
  2. 選擇“添加參考”
  3. 在“添加引用”對話框中,切換到“ COM”選項卡
  4. 檢查“ Microsoft Shell控件和自動化”

我猜想如果您不安裝Windows SDK,可能會丟失AxImp.exe,而Visual Studio可能無法創建允許您使用typelib的存根程序集。 我無法想象這怎么可能發生。 如果安裝了Visual Studio,則應該已經獲得了SDK。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM