我想讓我的應用程序在桌面上創建一個快捷方式。原因是因爲我的應用程序有一些這樣的驢外部dll和其他依賴關係,我更喜歡它在一個文件夾中,只是在我的桌面上有一個快捷方式,而不是在我的桌面上的所有文件或包含所有內容的文件夾。創建具有依賴關係的應用程序的快捷方式
這是我第一次嘗試這個。我相信這很簡單,如果我的問題有點不好意思,那真的很抱歉。 我簡單的代碼看起來是這樣的:
string checkDesktopDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
if (!File.Exists(checkDesktopDir + "\\My app.url"))
{
ShortCutWithDependencies("My app");
}
private void ShortCutWithDependencies(string sAppName)
{
string deskDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
using (StreamWriter writer = new StreamWriter(deskDir + "\\" + sAppName + ".url"))
{
string app = Assembly.GetExecutingAssembly().Location;
MessageBox.Show(app);
writer.WriteLine("[InternetShortcut]");
writer.WriteLine("URL=" + app);
writer.WriteLine("IconIndex=0");
string icon = app.Replace('\\', '/');
writer.WriteLine("IconFile=" + icon);
writer.Flush();
}
}
但是我的應用程序不會有任何效果。只要它到達部件,它將需要依賴關係來繼續它將崩潰。更具體地說,當我使用通過DLLImport
導入的方法(如bass.dll方法)時,它會簡單地崩潰。當然,我的輸出中看不到任何東西,因爲這個快捷方式是一個編譯好的.exe文件。
所以我的問題是這樣的;我如何創建我的應用程序的完整快捷方式?
編輯:dllimport的
[DllImport("bass.dll")]
public static extern bool BASS_Start();
[DllImport("bass.dll")]
public static extern bool BASS_Init(int device, uint freq, uint flag,
IntPtr hParent, uint guid);
if (mp3ToPlay != string.Empty)
{
BASS_Start();
BASS_Init(-1, 44100, 0, IntPtr.Zero, 0);
BassHandle = BASS_StreamCreateFile(false, mp3ToPlay, 0, 0, 0x20000);
BASS_ChannelPlay(BassHandle, false);
PlayBackLength = BASS_ChannelGetLength(BassHandle, 0);
PlayBack = true;
}
的更新例如現在我相信這就是問題所在。但我不確定。外部dll(bass.dll,Newtonsoft.Json.dll和Spotify.dll)將Copy to output directory
設置爲Copy always
並將它們複製。 .exe運行良好,創建並快速發送到桌面的快捷方式也可以正常運行。
編輯:更新2費德里科的例子 現在,這將工作:
private void CreateShortcut()
{
object shDesktop = "Desktop";
WshShell shell = new WshShell();
string shortcutAddress = (string)shell.SpecialFolders.Item(ref shDesktop) + @"\iBlock.lnk";
IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutAddress);
shortcut.Description = "New shortcut for a iBlock";
shortcut.Hotkey = "Ctrl+Shift+N";
shortcut.TargetPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\iBlock\iBlock.exe";
shortcut.Save();
}
但是這裏有一個小故障。 我的代碼
public string mp3Path = Directory.GetCurrentDirectory() + "\\mp3Directory";
if (!System.IO.File.Exists(mp3Path))
{
Directory.CreateDirectory(mp3Path);
}
這部分將其更改爲AppDomain.CurrentDomain.BaseDirectory
會很容易地解決它。
目前尚不清楚問題所在。那些依賴關係在哪裏?你如何加載它們? – Evk
他們是外部dll。我通過DLLImport調用它們。有些位於應用程序位置,而其他位於同一位置的子文件夾中。 – user2530266
@ user2530266我認爲,如果您手動創建快捷方式並嘗試運行它,則會產生相同的行爲。 – Valentin