2009-03-11 7 views
5

.NET 1.0に戻って、MS Windowsでショートカットのターゲットを返すメソッドを書きました。これはまだバグCOMを使わずにC#でプログラム的にWindowsファイルシステムのショートカットに従う方法はありますか?

private FileInfo GetFileFromShortcut(FileInfo shortcut) 
{ 
    FileInfo targetFile = null; 

    try 
    { 
     IWshRuntimeLibrary.WshShell wShell = new IWshRuntimeLibrary.WshShellClass(); 
     IWshRuntimeLibrary.WshShortcut wShortcut = (IWshRuntimeLibrary.WshShortcut)wShell.CreateShortcut(shortcut.FullName); 

     // if the file wasn't a shortcut then the TargetPath comes back empty 
     string targetName = wShortcut.TargetPath; 
     if (targetName.Length > 0) 
     { 
      targetFile = new FileInfo(targetName); 
     } 
    } 
    catch (Exception) 
    { // will return a null targetFile if anything goes wrong 
    } 

    return targetFile; 
} 

私を、私はよりエレガントなものでこれを置き換えるために探していますが、場合にのみました:それは、COMインターフェイスを介して強制的にWindowsスクリプトホストオブジェクトモデルと野獣に相互運用機能を使用してこれをしました交換は実際には少なくとも同様に機能します。私はまだショートカットのターゲットを見つけるネイティブのC#の方法を見つけることができません。そこには1つ、またはこれはまだこのタイプのことを行うための最善の方法ですか?

+0

大きな質問です。 COM interopなしでこれを動作させる方法を考えなかった – Sung

+0

残念なことに、これを達成するためにアンマネージコードでシェルを使用することは避けられませんでした。 – RobS

答えて

1

誰かがC#でショートカットファイルを操作するクラスを作成したようですが、ShellLinkと呼ばれていますが、それもCOMを使用しています。

+0

別のレイヤの背後にあるCOMアクティビティを隠すことは、私がやりたかったものではありませんでした。私はこのコードをオープンソースプロジェクトに公開したいと思い、COMバッシングパートが嫌いでした。しかし、他の方法がない場合は.... –

+1

なぜCOMを使いたくないですか? IShellLinkを使用することは、Windowsがショートカットの解析/変更を行うためのAPIとして提供する正しい方法です。 Windows Scripting Hostを使用した元のコードは、COMオブジェクトを使用したためではなく、スクリプト言語用に設計されたラッパーオブジェクトを使用していたためです。 COMはWindows上で常にWindowsの背後で使用されています。やむを得ないことだ。 –

1

.lnkまたは.urlファイルを開いて解析できませんか?

これは、同じことを語ると、ファイルがどのように見えるかを示しています。私はしばらく前にも、この中に興味を持った http://www.programmingtalk.com/showthread.php?t=7335

+1

公開された定義がないファイルを解析することは、プロダクションコードで頼りにしたいことではありません。少なくとも私は常に動作することがわかっているCOMインターフェイスをバッシングしている安全な回避策があります。 –

0

ここには、LNKファイルの(非公式の)description of the formatへのリンク付きのresponseが受け入れられています。どうやら、すべての利用可能なメソッドまだいくつかのAPIを通過します。