我想找到用户程序菜单中列出的每个应用程序。我使用以下例程:
private static void ProcessDirectoryLnkFiles(string path, bool recurse,
UpdateProcessFromLnkDelegate sProcFile)
{
try
{
string[] sPrograms = Directory.GetFiles(path, "*.lnk",
SearchOption.TopDirectoryOnly);
string[] sSubdirs = Directory.GetDirectories(path);
Shell32.Shell shell = new Shell32.Shell();
foreach (string p in sPrograms) {
Shell32.Folder sLinkFolder;
Shell32.FolderItem sLinkFolderItem;
Shell32.ShellLinkObject sLinkObject;
string sLinkFullpath;
// Get link full path
sLinkFullpath = Path.GetFullPath(p);
// Get link folder
sLinkFolder = shell.NameSpace(
Path.GetDirectoryName(sLinkFullpath));
// Get link item
sLinkFolderItem = sLinkFolder.Items().
Item(Path.GetFileName(sLinkFullpath));
// Get link object
sLinkObject = (Shell32.ShellLinkObject)
sLinkFolderItem.GetLink;
if (sLinkObject.Target.IsFolder == false)
sProcFile(sLinkObject);
}
if (recurse == true)
foreach (string dir in sSubdirs)
ProcessDirectoryLnkFiles(dir, true, sProcFile);
}
catch (UnauthorizedAccessException eUnauthorizedAccessException) {
sLog.Warn("Unable to iterate on directory {0} ({1}).",
path, eUnauthorizedAccessException.Message);
}
catch (IOException eIOException) {
sLog.Warn("Unable to iterate on directory {0} ({1}).",
path, eIOException.Message);
}
catch (COMException eCOMException) {
}
catch {
throw;
}
}
这在 Windows 7 x64 上运行良好。但不幸的是,在 Windows XP x86 上,该Shell32.Shell
对象没有声明该Shell32.Shell.Target
属性。如何使此代码在 Windows XP 上运行?