Introduction
It should be a simple matter to programatically create a shortcut on the
desktop that links to a particular file. Unfortunately, as far as I know, the
.NET Framework does not support this directly. However, by using the Windows
Scripting Host Object Model, it takes only a few lines of code to create a
shortcut anywhere within the file system. The purpose of this article is to show
how to do this and to provide a class with methods that make it even simpler.
The demonstration program uses this class to test for the existence of shortcuts
and create or delete them with the click of a checkbox.
Shell Links
A standard feature of the Windows operating system is the ability to create a
file that provides a link to any other file within the Windows file system.
These so-called "Shortcuts" or "Shell Links" are used in many ways.
Examples include the shortcuts that appear as icons on the Windows Desktop, the
Start menu, the Quick Launch area within the Task Bar, and the "Send To" menu
that appears when right-clicking a file in Explorer. These shortcuts are easy to
create manually in the Windows GUI, but within a .NET program they typically
require the programmer to use Interop.
Windows Scripting Host
The Windows Scripting Host (WSH) enables a number of file system and network
operations to be performed from a script file. Fortunately, it is very simple to
directly program the WSH in a .NET program by including a reference to the WSH
runtime library (IWshRuntimeLibrary). To do this within the Visual Studio .NET
IDE, do the following: after creating a new project, right-click on the project
name within the Solution Explorer, select "Add Reference", select the "COM" tab,
find and select the "Windows Script Host Object Model" in the listbox, click
"Select", and then click "OK". Next, include a reference to the library, for
example, within a C# file use the following:
using IWshRuntimeLibrary;
Once this groundwork is done, it is nearly trivial to create a Shell
Link.
Creating a Shell Link
The following code is all that is necessary to create a Shell Link using the
Windows Scripting Host.
WshShell shell = new WshShell();
IWshShortcut link = (IWshShortcut)shell.CreateShortcut(LinkPathName);
link.TargetPath=TargetPathName;
link.Save();
The IWshShortcut
object has a number of properties that allow
the programmer to set things like the target path, the icon, the file name, the
arguments, etc. You can explore these within Visual Studio using the Object
Browser or Intellisense.
The Link Class
The demonstration program includes a class named Link
that
encapsulates static methods to test for the presence of a shortcut and to create
or delete one if necessary. For example, to test for the presence of a desktop
shortcut named "Shell Link", use the following code:
DesktopFolder=Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
if(Link.Exists(DesktopFolder, "Shell Link"))DoSomething();
To create or delete a desktop shortcut named "Shell Link" that points to a
file whose path is given by TargetPathName
, use the following code:
DesktopFolder=Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
Link.Update(DesktopFolder, TargetPathName, "Shell Link", Create);
This will create a link if Create
is true
and
delete it if Create
is false
. If no change is needed,
the code will do nothing.
Conclusion
That's all there is to it! It is simple to incorporate WSH in a .NET program.
Creating Shell Links is one good reason to do so. You may find other uses for
WSH in your programs such as mapping network drives, setting up printer
connections, determining the free space on a disk, or any other tasks that can
be automated with the Windows Scripting Host.