2009-10-01 43 views
1

我已經編寫了一個簡單的基於FTP的文件同步程序。其設置可以存儲在XML文件中。我希望用戶能夠使用各種配置快速打開程序。所以我設置了程序,以便能夠通過命令行參數讀取配置文件的路徑。這種方式可以基於不同的配置文件在桌面上創建快捷方式。現在我試圖添加一個功能,它會自動爲特定的配置文件創建快捷方式。如何在C#中使用命令行參數創建應用程序快捷方式(.lnk文件)

我試過使用ShellLink.cs的this post的例子。我也嘗試使用IWshRuntimeLibrary,如here所述。我可以創建快捷方式,但屬性窗口中快捷方式的「目標類型」最終在新快捷方式中變爲空白。如果我雙擊快捷方式,我會從窗口收到一個錯誤窗口,它有問題在提供的路徑中找到FooBar.xml。所以它似乎沒有意識到它應該啓動一個不打開文件的應用程序。

現在,如果我打開新快捷方式的屬性並更改目標字段中的某些內容,然後將其更改回來。例如,從xml中刪除x,然後將其添加回來。點擊確定後,快捷方式的圖標會立即切換到我的應用程序的圖標,並在雙擊時正常工作。

因此,當我手動編輯快捷方式時,它會強制窗口檢查快捷方式的目標類型是否爲應用程序並切換它。

那麼,如何通過C#在目標路徑不以.exe結尾的情況下使用目標類型的應用程序創建新的快捷方式?

+0

我不認爲這是可能的。你的FTP程序不是.exe嗎?您指定命令行參數shoudl的事實仍然允許您使用應用程序目標類型創建快捷方式。我發佈了一個答案,這個答案對我來說正確,使用IWshRuntimeLibrary,但在重新閱讀您的問題後被刪除。我可以再次發佈,如果這確實是你想要做的 – Joepro 2009-10-01 03:30:58

回答

18

您需要將COM引用添加到Windows腳本宿主。 AFAIK,沒有原生的.net方式來做到這一點。

此示例將在桌面上創建一個快捷方式。它將啓動FTP應用程序,使用XML文件集作爲命令行參數。只需將值更改爲您所需的值即可。

 WshShellClass wsh = new WshShellClass(); 
     IWshRuntimeLibrary.IWshShortcut shortcut = wsh.CreateShortcut(
      Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\shorcut.lnk") as IWshRuntimeLibrary.IWshShortcut; 
     shortcut.Arguments = "c:\\app\\settings1.xml"; 
     shortcut.TargetPath = "c:\\app\\myftp.exe"; 
     // not sure about what this is for 
     shortcut.WindowStyle = 1; 
     shortcut.Description = "my shortcut description"; 
     shortcut.WorkingDirectory = "c:\\app"; 
     shortcut.IconLocation = "specify icon location"; 
     shortcut.Save(); 

利用該代碼,目標類型被正確填充應用和將啓動應用與settings1.xml作爲命令行參數。從你的問題來看,我認爲這就是你想要做的。但是,我不認爲你可以創建一個快捷方式,讓我們說只是一個XML文件,並將目標類型設置爲應用程序。

爲.NET 4.0及以上版本,請用下面的第一行(感謝米莉·史密斯!):

 WshShell wsh = new WshShell(); 
+3

添加參考> COM> Windows腳本宿主對象模型 – Doug 2015-01-21 03:36:55

+2

你好:) 我試過代碼,但它返回代碼的這部分錯誤'WshShellClass wsh = new WshShellClass();' 它說:錯誤 *互操作類型'IWshRuntimeLibrary.WshShellClass'不能嵌入。改爲使用適用的界面。* – ThEpRoGrAmMiNgNoOb 2015-03-20 03:02:17

+1

@MichayCarpa http://stackoverflow.com/a/4553402/2850543得到的代碼至少爲我編譯。對於.Net 4.0和更高版本,第一行應該是'WshShell wsh = new WshShell();'。 – 2015-12-29 00:15:41

相關問題