Shell32.dll .NET-Schnittstelle ist vom OS abhängig
Frage
Ich mag jede Anwendung finden aufgelistet im Anwenderprogramm-Menü. Ich verwende die folgende Routine:
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;
}
}
Dies läuft ganz gut auf Windows 7 x64. Aber leider unter Windows XP x86 das Shell32.Shell
Objekt erklärt nicht die Shell32.Shell.Target
Eigenschaft. Wie kann ich diesen Code läuft auf Windows XP?
Lösung
Verwenden Sie die Path-Eigenschaft, das gibt Ihnen den Weg zum Ziel. System.IO.Directory.Exists () kann man dann sagen, ob es Verzeichnis ist oder nicht.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow