2013-06-05 36 views
8

我想以編程方式創建目錄的快捷方式。我發現了很多例子,但沒有一個看起來可以工作。C#編程式創建目錄的快捷方式並不總是工作

我觀察所產生的快捷方式的屬性三種不同的結果:

  1. 文件的快捷方式,鍵入指定爲「快捷方式(.lnk)」,它使得打開方式對話框彈出詢問我附加一個擴展名。

  2. 快捷方式文件屬性被分配爲「文件」,當雙擊時它完全沒有。

  3. 最後這當然是我最喜歡的...快捷方式文件屬性分配爲:「文件夾」,它應該像它的工作。

這是我目前使用的代碼...我已經嘗試了一些這種變化。

bool IsExists = false; 
string icon = appPath + "Welcome.ico"; 

// Their is a difference to local and ClickOnce App locations... this compensates for it 
IsExists = System.IO.File.Exists(icon); 
if (!IsExists) 
{ 
    icon = appPath + @"bin\Debug\Welcome.ico"; 

} 

var desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); 
var target = (Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Artronix\Welcome To FreightWare Online\").Replace(@"\","/"); 
IWshShortcut shortcut; 
var wshShell = new WshShellClass(); 
shortcut = (IWshShortcut)wshShell.CreateShortcut(Path.Combine(desktop, @"FreightWare Resources.lnk")); 
shortcut.IconLocation = icon; 
shortcut.TargetPath = Path.GetFullPath(target); 
shortcut.Save(); 
+1

我懷疑appPath是這個信息的罪魁禍首。使用你的代碼的第二部分(並使用我自己的設置.ico文件),我總是得到第三個結果。當目標路徑不存在時,我只實現了第一個結果。如果你可以縮小在什麼條件下的結果不同,這可能有幫助 – panhandel

+0

這裏是appPath:private string appPath = System.AppDomain.CurrentDomain.BaseDirectory;不同之處在於,如果我通過InstallShield或VS在本地安裝此應用程序,它會將該圖標文件安裝在與appPath相同的目錄中......但是,當我由於某種原因運行ClickOnce Web安裝時,它會添加另一個bin和Debug文件夾在appPath目錄中...因此,if語句如果在appPath中找不到,則查看擴展目錄內部。另請注意,該圖標始終顯示在快捷方式內,因此我知道它正在找到正確的路徑。 –

+0

我非常想試一試,只是因爲你要求upvotes。我非常確定在某個地方有一個規則,除了它是一個明顯的互聯網假人。 – Mels

回答

2

嘗試ShellLink

using (ShellLink shortcut = new ShellLink()) 
{ 
    shortcut.Target = Application.ExecutablePath; 
    shortcut.WorkingDirectory = Path.GetDirectoryName(Application.ExecutablePath); 
    shortcut.Description = "My Shorcut Name Here"; 
    shortcut.DisplayMode = ShellLink.LinkDisplayMode.edmNormal; 
    shortcut.Save("%HOMEPATH%/Desktop/"); 
} 
2

謝謝大家的幫助......我想它了。我不想把它作爲答案發布,但是爲了防萬一遇到同樣的問題,我認爲......雖然我對我的疏忽感到羞恥。

原來代碼沒有錯。 Panhandel在發表聲明時給了我一個線索,告訴他在哪裏可以找到解決方案:「當目標路徑不存在時,我只獲得了第一個結果。」由於他總是得到正確的結果,並且他只獲得了當目錄不存在時得到的結果......我意識到問題可能是我在一行中以編程方式創建目錄,然後在下一個創建圖標中創建目錄。 。我需要給系統更多的時間來完全創建目錄