プログラムから、自分自身を実行できる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のショートカットをデスクトップに作成するように、プログラムからプログラムしています
あー 今回は説明の方がややこしい
大波バカ's
スゲーサッパリパリわからんです