我正試圖讀取C#4應用程序中所有桌面快捷方式的目標。根據快捷方式是爲所有用戶創建還是僅爲當前用戶創建,Windows桌面上的快捷方式可以來自多個位置。在這種特定情況下,我試圖從公共桌面讀取快捷方式,例如從C:\ Users \ Public \ Desktop \ shortcut.lnk。爲什麼在通過Shell32讀取公共快捷方式時遇到E_ACCESSDENIED?
的代碼是這樣的(路徑爲contaning的路徑LNK文件中的字符串):
var shell = new Shell32.ShellClass();
var folder = shell.NameSpace(Path.GetDirectoryName(path));
var folderItem = folder.ParseName(Path.GetFileName(path));
if (folderItem != null)
{
var link = (Shell32.ShellLinkObject)folderItem.GetLink;
最後一行拋出System.UnauthorizedAccessException的,表明它不能讀取快捷方式文件的內容。我曾嘗試用戶的私人桌面上的快捷方式文件(c:\ Users \ username \ Desktop),並且工作正常。
所以,我的問題是:
(1)爲什麼我的應用程序不允許/讀/從代碼中的快捷方式,當我可以清晰地讀出的內容爲用戶?
(2)有沒有辦法解決這個問題?也許使用特殊的清單文件的應用程序?
而且,順便說一句,我的操作系統是Windows 7,64位。
很好
-H-
很好,工作,非常感謝 - 但我不確定在實際嘗試修改某些內容之前,我看到拋出異常的邏輯。特別是因爲我可以通過Windows用戶界面輕鬆讀取值,而不必提升提示。 – corvuscorax 2010-05-29 12:35:52
您使用的是15年前的COM接口,在UAC設想之前發明* long *。它沒有「EnableChangingProperties」屬性,該屬性設置爲False時將允許只讀訪問.lnk文件。資源管理器中的屬性表處理程序使用別的東西不知道是什麼,但我懷疑它是可以編寫腳本的。 shell接口太舊了,不容易在.NET中使用,只有C/C++程序可以。 – 2010-05-29 13:03:46