プログラムから、自分自身を実行できる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
スゲーサッパリパリわからんです