2009-10-01 118 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

相关问题