C# 如何在.NET/C中以编程方式创建应用程序的快捷方式(.lnk)并将其添加到启动文件夹#
我的应用程序将具有每台计算机(而不是每用户)的启动快捷方式。我可以在安装过程中创建快捷方式,没有问题。我的问题出现在用户稍后将其删除,然后尝试重新启用时。换句话说,他们关闭Runnstartup(删除启动墨迹),然后在稍后的时间决定是否希望它在启动时运行,以便返回首选项并重新启用 显然,对于.NET来说,这是一个非常常见的抱怨,即没有一种本地方法来创建快捷方式。但是,还没有找到一个很好的解决方案 我发现/考虑过的解决方案:C# 如何在.NET/C中以编程方式创建应用程序的快捷方式(.lnk)并将其添加到启动文件夹#,c#,.net,windows-vista,installation,uac,C#,.net,Windows Vista,Installation,Uac,我的应用程序将具有每台计算机(而不是每用户)的启动快捷方式。我可以在安装过程中创建快捷方式,没有问题。我的问题出现在用户稍后将其删除,然后尝试重新启用时。换句话说,他们关闭Runnstartup(删除启动墨迹),然后在稍后的时间决定是否希望它在启动时运行,以便返回首选项并重新启用 显然,对于.NET来说,这是一个非常常见的抱怨,即没有一种本地方法来创建快捷方式。但是,还没有找到一个很好的解决方案 我发现/考虑过的解决方案: 而不是创建一个快捷方式。复制一个就行了。这可能是一个很好的解决方案。我
- 而不是创建一个快捷方式。复制一个就行了。这可能是一个很好的解决方案。我不能指望有一个开始菜单链接。但是,我想我可能会创建一个并将其保存在程序目录中。。。这将问题转移到我的安装程序上,我必须使用安装时指定的适当路径创建快捷方式
- 按原样操作并使用COM包装器对象。我想避免使用COM。它也是在2003年写的。所以,我不确定它对vista的支持程度。我想试一试,但手边没有vista框
- 改为使用注册表。这就是我目前的做法。。。但在Vista上遇到了一些问题。似乎大家都认为启动菜单快捷键是实现这一点的正确方法,所以这就是我的目标
更新:复制安装程序创建的快捷方式是最佳解决方案。完成后我会发布代码。。。遇到了一些障碍,a)Environment.GetSpecialFolder没有对已解决的StartMenu的引用。。。但是,现在我要处理的是提升将文件复制到正确位置的权限。我为此主题创建了一个新的stackoverflow问题:您可以在应用程序的program files文件夹中安装应用程序的快捷方式,然后根据需要复制该.lnk文件。我已经使用此解决方案一段时间了,看起来效果不错
正如Joel所建议的,正确的解决方案是在安装时在program files文件夹中安装快捷方式,然后将.lnk复制到startup文件夹。尝试创建快捷方式更加困难 以下代码执行以下操作:
- 它为您获取所有用户启动文件夹的路径。Environment.GetSpecialFolder相当有限,没有对此文件夹的引用,因此需要进行系统调用李>
- 具有复制和删除快捷方式的方法
我已经完成了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Shell32;
using IWshRuntimeLibrary;
using System.IO;
namespace CMS.data
{
public class overall
{
public static void place_shortcut_on_desktop()
{
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\YourName.lnk";
string shortcutto = System.Reflection.Assembly.GetExecutingAssembly().Location;
var wsh = new IWshShell_Class();
IWshRuntimeLibrary.IWshShortcut shortcut = wsh.CreateShortcut(desktopPath) as IWshRuntimeLibrary.IWshShortcut;
shortcut.TargetPath = shortcutto;
shortcut.WorkingDirectory = Directory.GetParent(shortcutto).FullName;
shortcut.Save();
}
}//class overall
}
记住“工作目录”,否则可能会出现问题
你也可以这样添加图标,但在我的情况下,我不需要它
这是我在stack overflow上的第一个答案,所以感谢会非常有帮助IShellLink在Vista中运行良好。AFAIK是创建/解析快捷方式的最佳方式。您也可以通过与IWshRuntimeLibrary.dll的互操作关联来实现这一点,但这意味着您最终可能会提供一个额外的互操作程序集。我将此解决方案与非常感谢结合在一起,在2017年看到这一点,仍然很有帮助
// Quit the application if the per user setting for RunOnStartup is false.
if (args != null && args.Length > 0 && args[0].Contains("startup"))
{
if (Settings1.Default.RunOnStartup == false)
{
Application.Exit();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Shell32;
using IWshRuntimeLibrary;
using System.IO;
namespace CMS.data
{
public class overall
{
public static void place_shortcut_on_desktop()
{
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\YourName.lnk";
string shortcutto = System.Reflection.Assembly.GetExecutingAssembly().Location;
var wsh = new IWshShell_Class();
IWshRuntimeLibrary.IWshShortcut shortcut = wsh.CreateShortcut(desktopPath) as IWshRuntimeLibrary.IWshShortcut;
shortcut.TargetPath = shortcutto;
shortcut.WorkingDirectory = Directory.GetParent(shortcutto).FullName;
shortcut.Save();
}
}//class overall
}