在C#开发中,经常需要实现一些系统级的自动化配置操作,比如给应用创建桌面快捷方式、在程序菜单中添加启动项,或者把常用网页添加到浏览器收藏夹。这些操作不需要依赖第三方工具,通过系统自带的接口和COM组件就能实现,下面我们逐一讲解具体实现方法。

准备工作
创建桌面快捷方式和程序菜单项需要用到Windows Script Host Object Model的COM组件,首先需要在项目中添加对应的引用。右键点击项目引用,选择添加引用,在COM选项卡中找到Windows Script Host Object Model,勾选后确认添加,对应的命名空间是IWshRuntimeLibrary。
创建桌面快捷方式
桌面快捷方式的本质是一个后缀为.lnk的文件,存放在桌面路径下,通过IWshRuntimeLibrary的WshShell类可以创建这类文件。
实现步骤
- 获取桌面路径,通过
Environment.GetFolderPath(Environment.SpecialFolder.Desktop)可以拿到当前用户的桌面目录 - 创建
WshShell实例,用于操作快捷方式 - 指定快捷方式的目标路径、名称、图标等属性,保存为.lnk文件
代码示例
using System;
using System.IO;
using IWshRuntimeLibrary;
namespace ShortcutDemo
{
class DesktopShortcutCreator
{
/// <summary>
/// 创建桌面快捷方式
/// </summary>
/// <param name="targetPath">快捷方式指向的目标程序路径</param>
/// <param name="shortcutName">快捷方式名称</param>
/// <param name="iconPath">快捷方式图标路径,可为空</param>
public static void CreateDesktopShortcut(string targetPath, string shortcutName, string iconPath = null)
{
// 获取桌面路径
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
// 快捷方式完整路径
string shortcutPath = Path.Combine(desktopPath, $"{shortcutName}.lnk");
// 如果已存在同名快捷方式,先删除
if (File.Exists(shortcutPath))
{
File.Delete(shortcutPath);
}
// 创建WshShell实例
WshShell shell = new WshShell();
// 创建快捷方式对象
IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutPath);
// 设置快捷方式属性
shortcut.TargetPath = targetPath; // 目标程序路径
shortcut.WorkingDirectory = Path.GetDirectoryName(targetPath); // 工作目录
shortcut.WindowStyle = 1; // 窗口样式,1为正常窗口
shortcut.Description = $"{shortcutName}快捷方式"; // 描述信息
// 如果传入了图标路径,设置图标
if (!string.IsNullOrEmpty(iconPath) && File.Exists(iconPath))
{
shortcut.IconLocation = iconPath;
}
// 保存快捷方式
shortcut.Save();
Console.WriteLine($"桌面快捷方式创建成功,路径:{shortcutPath}");
}
}
}创建程序菜单项
程序菜单项分为当前用户所有和程序所有用户两种,对应的路径分别是Environment.SpecialFolder.StartMenu和Environment.SpecialFolder.CommonStartMenu,实现方式和桌面快捷方式类似,只是存放路径不同。
代码示例
using System;
using System.IO;
using IWshRuntimeLibrary;
namespace ShortcutDemo
{
class StartMenuShortcutCreator
{
/// <summary>
/// 创建程序菜单项
/// </summary>
/// <param name="targetPath">目标程序路径</param>
/// <param name="shortcutName">菜单项名称</param>
/// <param name="forAllUsers">是否为所有用户创建</param>
public static void CreateStartMenuShortcut(string targetPath, string shortcutName, bool forAllUsers = false)
{
// 根据参数选择程序菜单路径
Environment.SpecialFolder folder = forAllUsers ? Environment.SpecialFolder.CommonStartMenu : Environment.SpecialFolder.StartMenu;
string startMenuPath = Environment.GetFolderPath(folder);
// 可以在程序菜单下创建子文件夹,这里直接放在根目录
string shortcutPath = Path.Combine(startMenuPath, $"{shortcutName}.lnk");
if (File.Exists(shortcutPath))
{
File.Delete(shortcutPath);
}
WshShell shell = new WshShell();
IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutPath);
shortcut.TargetPath = targetPath;
shortcut.WorkingDirectory = Path.GetDirectoryName(targetPath);
shortcut.Description = $"{shortcutName}程序菜单项";
shortcut.WindowStyle = 1;
shortcut.Save();
Console.WriteLine($"程序菜单项创建成功,路径:{shortcutPath}");
}
}
}添加网页到收藏夹
Windows系统的IE浏览器收藏夹路径在Environment.SpecialFolder.Favorites下,每个收藏项是一个.url后缀的文件,文件内容是固定的格式,写入对应内容即可完成添加。如果是其他浏览器,需要找到对应浏览器的收藏夹路径,原理类似。
实现步骤
- 获取收藏夹路径
- 创建.url文件,写入对应的配置内容
- 指定网页的URL、标题、图标等属性
代码示例
using System;
using System.IO;
using System.Text;
namespace ShortcutDemo
{
class FavoritesAdder
{
/// <summary>
/// 添加网页到IE收藏夹
/// </summary>
/// <param name="webUrl">网页URL</param>
/// <param name="webTitle">网页标题</param>
public static void AddWebToFavorites(string webUrl, string webTitle)
{
// 获取收藏夹路径
string favoritesPath = Environment.GetFolderPath(Environment.SpecialFolder.Favorites);
// 收藏项文件路径
string favoriteFilePath = Path.Combine(favoritesPath, $"{webTitle}.url");
if (File.Exists(favoriteFilePath))
{
File.Delete(favoriteFilePath);
}
// 构建.url文件内容
StringBuilder urlContent = new StringBuilder();
urlContent.AppendLine("[InternetShortcut]");
urlContent.AppendLine($"URL={webUrl}");
urlContent.AppendLine($"IconFile={webUrl}"); // 图标可以指定为网页favicon
urlContent.AppendLine("IconIndex=0");
// 写入文件
File.WriteAllText(favoriteFilePath, urlContent.ToString(), Encoding.Default);
Console.WriteLine($"网页已添加到收藏夹,路径:{favoriteFilePath}");
}
}
}注意事项
- 创建所有用户的程序菜单项需要管理员权限,否则会抛出权限异常
- 目标程序路径需要是绝对路径,否则快捷方式可能无法正常启动
- 如果目标程序是.NET程序,建议把快捷方式的工作目录设置为程序所在目录,避免相对路径资源加载失败
- 其他浏览器的收藏夹路径不同,比如Chrome的收藏夹通常在用户目录的AppData下,需要根据实际情况调整路径
调用示例
可以在Main方法中调用上述方法测试效果:
using System;
namespace ShortcutDemo
{
class Program
{
static void Main(string[] args)
{
// 测试创建桌面快捷方式,替换为你的程序路径
string targetExe = @"C:\Windows\notepad.exe";
DesktopShortcutCreator.CreateDesktopShortcut(targetExe, "记事本快捷方式");
// 测试创建程序菜单项
StartMenuShortcutCreator.CreateStartMenuShortcut(targetExe, "记事本菜单项", false);
// 测试添加网页到收藏夹
FavoritesAdder.AddWebToFavorites("https://ipipp.com", "示例网站");
Console.WriteLine("所有操作完成,请检查对应位置");
}
}
}
C#桌面快捷方式IWshRuntimeLibrary程序菜单项网页收藏夹修改时间:2026-05-29 04:33:27