2016-07-01 4 views
1

プロジェクトはいくつかのショートカットを検索してパスを検索します。また、ショートカットも作成されます。 > Windowsスクリプトホストオブジェクトモデル、およびいくつかのなし - COM:C#ショートカットを作成して既存のショートカットのパスを取得する方法(ベストプラクティス)

多くの記事を読んだ後、それは、いくつかに用いて、参考これにアプローチする複数の方法があるようです。このリファレンスを追加することを必要とするオプションを使用することは、パフォーマンス上の負担ですか?

私はショートカットを作成するために古いVBコードを使用する方法を示したポストを配置し、誰にも役立つ場合には以下のように投稿し、参照先を使用するよりパフォーマンスストレスが少ないかどうか尋ねます。Windows Script Host Object Model

string[] myLines = {"set WshShell = WScript.CreateObject(\"WScript.Shell\")", 
    "strDesktop = \"" + destinationDir + "\"", 
    "set oShellLink = WshShell.CreateShortcut(\"" + path2shortcut + "\")" 
    "oShellLink.TargetPath = \"" + targetPath + "\"", 
    "oShellLink.WindowStyle = 1", 
    "oShellLink.HotKey = \"CTRL+SHIFT+F\"", 
    "oShellLink.IconLocation = \"notepad.exe, 0\"", 
    "oShellLink.WorkingDirectory = strDesktop", 
    "oShellLink.Save()" }; 
System.IO.File.WriteAllLines("test.vbs", myLines); 
System.Diagnostics.Process P = System.Diagnostics.Process.Start("test.vbs"); 
P.WaitForExit(int.MaxValue); 
System.IO.File.Delete("test.vbs"); 

以上ものWindowsへの参照を必要としないこと、パフォーマンスのためのより良いが、ショートカットのパスを取得する方法を使用する場合は、Windowsスクリプトホストオブジェクトモデル、 は、私は疑問に思って、参照を追加する必要はありませんのでスクリプトホストオブジェクトモデル。ここで

は、ショートカットを検索した方法の2つのオプションがあります。

オプション1)COMへの参照使用しています - オプション2

WshShell shell = new WshShell(); 
link = (IWshShortcut)shell.CreateShortcut(linkPathName); 
MessageBox.Show(link.TargetPath); 

...> Windowsスクリプトホストオブジェクトモデル)をリファレンスを使用しません、それがFileStreamをを使用して、BLEZという名前のユーザーは追加せずに行う方法を示しています一度に多くのショートカットを反復(約100)場合はここで[ を参照するリンク - https://blez.wordpress.com/2013/02/18/get-file-shortcuts-target-with-c/]

FileStream fileStream = File.Open(file, FileMode.Open, FileAccess.Read) 
using (System.IO.BinaryReader fileReader = new BinaryReader(fileStream)) 
{ 
    fileStream.Seek(0x14, SeekOrigin.Begin);  // Seek to flags 
    uint flags = fileReader.ReadUInt32();  // Read flags 
    // ... code continues for another 15 lines 
} 

があり、これらのオプションのいずれかは、パフォーマンスの向上のためにありますか? これはパフォーマンス上の負担が不明なので、「using」ステートメントを使用することが賢明かもしれないと思いましたか? (おそらくそれは不可能であるか、または「過剰」です)私は多くの方法を試しましたが、これを行う方法は見つけられませんでした。 「[System.Runtime.InteropServices.DllImport( 『shell32.dllの』)]」 、まだ運を: は、私も直接DLLを参照しようとしました。

だから私は、パスのショートカットのために検索ショートカット&を作成するための最高のパフォーマンスを見つけるためにあなたの助けをお願いします。

任意の入力を歓迎します。私は可能な限り簡単かつ具体的にしようとしました。私はあなたの助けに感謝します!続き

答えて

1

は、あなたの質問に部分的な答えです:

ユアーズに私の知っているショートカットファイルを作成する唯一の方法です。 ショートカットファイルののターゲットパスを読み取ったときに私が出会った最速の方法です。これはShell32参照も使用します。

これは、100個のショートカットファイルのターゲットパスを読み取るためにこれをテストしました。私のマシンでは0.9秒でこれらのパスを読み込みます。

+0

素晴らしい!これらの情報をお寄せいただきありがとうございます。リファレンスをShell32で使用することによるパフォーマンス上の問題についてご存じですか? (私はWindowsスクリプトホストオブジェクトモデルへの参照を追加するだけで利用できると思います) – Budapest

関連する問題