Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
733 views
in Technique[技术] by (71.8m points)

winforms - How do you create an application shortcut (.lnk file) in C# with command line arguments

I've written a simple FTP based file synchronization program. The settings of which can be stored in an XML file. I want users to be able to quickly open the program using various configurations. So I set up the program to be able to read the path to a config file through command line argument. This way shortcuts can be created on the desktop based on different config files. Now I'm trying to add a feature that will automatically create the shortcut for a specific config file.

I've tried using the example from this post using ShellLink.cs. And I've also tried using IWshRuntimeLibrary as described here. I'm able to create the shortcut, but the "Target Type" of the shortcut in the properties window ends up being blank in the new shortcut. If I double click the shortcut I get an error window from windows about it having problems finding FooBar.xml at the path provided. So it seems like it doesn't realize that it should be starting an application not opening a file.

Now, if I open the properties of the new shortcut and change something in the target field, and then change it back. For example delete the x from xml and then just add it back. After click OK the icon of the shortcut immediately switches to the icon of my app, and works correctly when double clicked.

So it appears that when I edit the shortcut manually it forces windows to check if the shortcut target type should be Application and switches it.

So how can I, through C#, create a new shortcut with a target type of Application when the target path does not end with .exe?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You'll need to add a COM reference to Windows Scripting Host. AFAIK, there is no native .net way to do this.

This sample will create a shortcut on the desktop. It will launch the FTP app, using the XML file set as a command line argument. Just change the values to what you need.

        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();

With this code, the target type is properly populated as application and will launch the app with settings1.xml as a command line argument. From your question, I think this is what you are trying to do. However, I don't think you can create a shortcut to, let's say just an xml file, and have the target type set as application.

For .Net 4.0 and above, replace the first line with the following (Thanks to Millie Smith!):

        WshShell wsh = new WshShell();

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...