如何在C#中创建相对Windows快捷方式?

时间:2017-08-14 15:23:55

标签: c# windows

我想在这里结合两个问题:1)How to create a relative shortcut in Windows和2)How to create a Windows shortcut in C#

我有以下代码来创建快捷方式(基于我看过的问题),但在分配shortcut.TargetPath时会抛出异常:“值不在预期范围内”

public void CreateShortcut() {
    IWshRuntimeLibrary.WshShell wsh = new IWshRuntimeLibrary.WshShell();
    IWshRuntimeLibrary.IWshShortcut shortcut = wsh.CreateShortcut(Path.Combine(outputFolder, "sc.lnk")) as IWshRuntimeLibrary.IWshShortcut;
    shortcut.Arguments = "";
    shortcut.TargetPath = "%windir%\\system32\\cmd.exe /c start \"\" \"%CD%\\folder\\executable.exe\"";
    shortcut.WindowStyle = 1;
    shortcut.Description = "executable";
    shortcut.WorkingDirectory = "%CD%";
    shortcut.IconLocation = "";
    shortcut.Save();
}

如何修复此问题并创建相对快捷方式?

注意:我不想编写批处理脚本来执行此操作,因为我的软件很可能安装在用户无法访问命令行的PC上 - 我们的客户通常非常锁定机器几乎肯定没有正确的权限来运行批处理文件。如果您对我如何创建一个“可移植”文件夹(在子文件夹中使用我的.exe)有任何建议,用户只需双击顶级文件夹中的某些内容即可运行exe,我愿意建议!

1 个答案:

答案 0 :(得分:4)

您无法在TargetPath - 属性中添加参数。 (见MSDN

将它们放入Arguments - 属性:

public void CreateShortcut() {
    IWshRuntimeLibrary.WshShell wsh = new IWshRuntimeLibrary.WshShell();
    IWshRuntimeLibrary.IWshShortcut shortcut = wsh.CreateShortcut(Path.Combine(outputFolder, "sc.lnk")) as IWshRuntimeLibrary.IWshShortcut;
    shortcut.Arguments = "/c start \"\" \"%CD%\\folder\\executable.exe\"";
    shortcut.TargetPath = "%windir%\\system32\\cmd.exe";
    shortcut.WindowStyle = 1;
    shortcut.Description = "executable";
    shortcut.WorkingDirectory = "%CD%";
    shortcut.IconLocation = "P:\ath\to\any\icon.ico";
    shortcut.Save();
}