たまにはプログラムの事などを(C#編) ショートカット作成

プログラムから、自分自身を実行できるEXEのショートカットをデスクトップに作成したくて、いくつかググってみたのですが、どうもC#の実装でこれといったのがありません

C#から「WshShell」を利用して「Windows Script Host」を動かすのが簡単そうだったのですが(つか最初これで実装)、「IWshRuntimeLibrary.dll」を再配布とかしないとだめなんで、そもそもリンクを自動作成したかった理由が、面倒なインストーラを作りたくなかったからで、それだと本末転倒気味になってくる(笑)

てーことで、ハタと気がつきました

そもそも WshShell を動かすのは Windows に標準であるわけだし、それならプログラムからスクリプトを書いちゃって、それを実行しちゃえばいいんでねの?

てーことで、以下が実装サンプルです
エラー処理は全くいれてませんので適当に追加してね!
(セキュリティとか絡むと面倒ですが…)

//作成するショートカットのパス
String shortcutPath = System.IO.Path.Combine(
 Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory),
 "ほげほげ.lnk");
// ショートカットが作成されていない場合に実行
if (!File.Exists(shortcutPath))
{
 // ショートカット作成用VBスクリプトを作成
 String VbsPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + @"\CreateShortcut.vbs";
 String Vbs = "";
 Vbs += "Set objShell = WScript.CreateObject(\"WScript.Shell\")\n";
 Vbs += "strFileName = \"" + shortcutPath + "\"\n";
 Vbs += "Set objShortCut = objShell.CreateShortcut(strFileName)\n";
 Vbs += "objShortCut.TargetPath = \"" + Application.ExecutablePath + "\"\n";
 Vbs += "objShortCut.Save";
 System.IO.StreamWriter sw = new System.IO.StreamWriter(VbsPath, false, System.Text.Encoding.GetEncoding("shift_jis"));
 sw.Write(Vbs);
 sw.Close();
 // スクリプトを実行
 System.Diagnostics.Process.Start(VbsPath);
}

簡単に説明すると
自分自身のショートカットがデスクトップに無い場合、プログラムと同じパスに「CreateShortcut.vbs」というVBスクリプトを書き出します
書き出した後はプログラムからランチしています
「CreateShortcut.vbs」は実行されると目的のEXEのショートカットをデスクトップに作成するように、プログラムからプログラムしています

あー 今回は説明の方がややこしい