Je veux lire le contenu binaire d'un fichier .lnk. Tant que la cible du raccourci (fichier LNK) existe, cela fonctionne bien avec io.file.readallbytes (fichier de chaîne). P>
mais p>
Si la cible du raccourci n'existe pas (crois-moi, je le veux), la méthode ne renvoie que zéro. Je suppose que c'est parce que le système d'exploitation suit le lien et s'il n'existe pas, il renvoie zéro p>
Y a-t-il un moyen de contourner le fait que le cadre suit la cible de la .lnk avant d'afficher le contenu du fichier .Lnk? p>
3 Réponses :
Je ne crois pas que Readallbytes induit le système d'exploitation de suivre la LNK à sa cible. Je suppose que le système d'exploitation a déjà résolu le fichier LNK (peut-être que lorsque vous avez parcouru le fichier dans Windows Explorer). P>
Il s'agit d'un raccourci annoncé d'un autre ordinateur. Le lien ne peut donc jamais être résolu.
Cela n'a pas beaucoup de sens, n'a pas de moyen facile de le vérifier. Je pense que la meilleure approche consiste à lire le fichier .lnk de la manière dont il est censé être lu. Vous pouvez utiliser COM pour le faire, le CLASSE SHITLLINKOBJECT A> implémente l'interface ISHELLLINK. Commencez avec Project + Ajouter une référence, onglet Parcourir et accédez à C: \ Windows \ System32 \ shell32.dll. Qui génère une bibliothèque Interop. Écrivez un code comme ceci:
Bel extrait. BTW, quand j'ai utilisé cela, je devais changer la dernière ligne pour revenir lnk.target.path.
En fait, la dernière ligne devrait être renvoyée lnk.path
Vous devez également ajouter Microsoft.Cshaarp Assembly pour éviter l'erreur de compilation de liant, et au lieu d'ajouter la coquille32.dll, vous devez sélectionner «Microsoft Shell Controls and Automation» dans l'onglet Bibliothèques de type COM.
Cela semble exiger que le fil STA fonctionne, que vous obtenez gratuitement dans une application C # UI, mais devez créer manuellement dans une application de console. Même dans ce cas, j'ai rencontré des erreurs sur certaines machines qui semblent être liées aux autorisations pour interagir avec le système d'interface utilisateur. Les applications de la console (y compris les services Windows) peuvent ne pas avoir l'autorisation d'interagir avec l'interface utilisateur. Le niveau inférieur Ishelllink semble éviter ces problèmes de fil et d'autorisations STA. Voir la réponse acceptée ici: Stackoverflow.com/Questtions/139010/...
Je suis capable d'utiliser ceci pour lire un fichier .lnk sans utiliser d'interface utilisateur ou autre fil.
C'est risqué, les versions Windows plus anciennes ne se comportent pas bien lorsque vous utilisez cet objet sur un fil non-STA. Win7 est le nouveau XP.
active le fichier a été verrouillé car il a été copié à partir d'une autre machine (j'utilise Server 2008 R2) le déverrouillage, il a renvoyé le comportement à attendu. P>
stupide moi. p>