当前位置:  开发笔记 > 编程语言 > 正文

在目录中创建应用程序快捷方式

如何解决《在目录中创建应用程序快捷方式》经验,为你挑选了3个好方法。

如何在C#中创建应用程序快捷方式(.lnk文件)或使用.NET框架?

结果将是指定应用程序或URL的.lnk文件.



1> Chasler..:

这不是那么简单,我会很喜欢,但有一个很大的一流的呼叫ShellLink.cs在 vbAccelerator

此代码使用interop,但不依赖于WSH.

使用此类,创建快捷方式的代码是:

private static void configStep_addShortcutToStartupGroup()
{
    using (ShellLink shortcut = new ShellLink())
    {
        shortcut.Target = Application.ExecutablePath;
        shortcut.WorkingDirectory = Path.GetDirectoryName(Application.ExecutablePath);
        shortcut.Description = "My Shorcut Name Here";
        shortcut.DisplayMode = ShellLink.LinkDisplayMode.edmNormal;
        shortcut.Save(STARTUP_SHORTCUT_FILEPATH);
    }
}


适用于Windows 7甚至64位应用程序:)

2> IllidanS4 wa..:

干净整洁.(.NET 4.0)

Type t = Type.GetTypeFromCLSID(new Guid("72C24DD5-D70A-438B-8A42-98424B88AFB8")); //Windows Script Host Shell Object
dynamic shell = Activator.CreateInstance(t);
try{
    var lnk = shell.CreateShortcut("sc.lnk");
    try{
        lnk.TargetPath = @"C:\something";
        lnk.IconLocation = "shell32.dll, 1";
        lnk.Save();
    }finally{
        Marshal.FinalReleaseComObject(lnk);
    }
}finally{
    Marshal.FinalReleaseComObject(shell);
}

就是这样,不需要额外的代码.CreateShortcut甚至可以从文件加载快捷方式,因此TargetPath等属性会返回现有信息.快捷方式对象属性.

对于不支持动态类型的.NET版本,这种方式也是可能的.(.NET 3.5)

Type t = Type.GetTypeFromCLSID(new Guid("72C24DD5-D70A-438B-8A42-98424B88AFB8")); //Windows Script Host Shell Object
object shell = Activator.CreateInstance(t);
try{
    object lnk = t.InvokeMember("CreateShortcut", BindingFlags.InvokeMethod, null, shell, new object[]{"sc.lnk"});
    try{
        t.InvokeMember("TargetPath", BindingFlags.SetProperty, null, lnk, new object[]{@"C:\whatever"});
        t.InvokeMember("IconLocation", BindingFlags.SetProperty, null, lnk, new object[]{"shell32.dll, 5"});
        t.InvokeMember("Save", BindingFlags.InvokeMethod, null, lnk, null);
    }finally{
        Marshal.FinalReleaseComObject(lnk);
    }
}finally{
    Marshal.FinalReleaseComObject(shell);
}


很干净.如果再次提出问题,这将是最佳答案.

3> Anuraj..:

我找到了这样的东西:

private void appShortcutToDesktop(string linkName)
{
    string deskDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

    using (StreamWriter writer = new StreamWriter(deskDir + "\\" + linkName + ".url"))
    {
        string app = System.Reflection.Assembly.GetExecutingAssembly().Location;
        writer.WriteLine("[InternetShortcut]");
        writer.WriteLine("URL=file:///" + app);
        writer.WriteLine("IconIndex=0");
        string icon = app.Replace('\\', '/');
        writer.WriteLine("IconFile=" + icon);
        writer.Flush();
    }
}

悲伤的文章"url-link-to-desktop"的原始代码


Anuraj:你在作弊 - 这不会创建一个LNK而是一个URL文件.
给定interop/wsh或逆向工程之间的选择文件格式我会选择后者.我认为这是一个非常安全的选择,他们不会很快改变格式.
推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有