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

2019-05-09 04:37发布

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

其结果将是一个.lnk文件到指定的应用程序或URL。

Answer 1:

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

此代码使用互操作,但不依赖于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);
    }
}


Answer 2:

尼斯和清洁。 (.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);
}


Answer 3:

我发现是这样的:

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();
    }
}

在原始代码sorrowman的文章“网址链接到桌面”



Answer 4:

调查我,所以我一直在解决发现的所有可能性后ShellLink :

//Create new shortcut
using (var shellShortcut = new ShellShortcut(newShortcutPath)
{
     Path = path
     WorkingDirectory = workingDir,
     Arguments = args,
     IconPath = iconPath,
     IconIndex = iconIndex,
     Description = description,
})
{
    shellShortcut.Save();
}

//Read existing shortcut
using (var shellShortcut = new ShellShortcut(existingShortcut))
{
    path = shellShortcut.Path;
    args = shellShortcut.Arguments;
    workingDir = shellShortcut.WorkingDirectory;
    ...
}

除了被简单有效,笔者(马蒂亚斯舍格伦,MS MVP)是某种COM /的PInvoke /互操作大师,并仔细阅读他的代码,我认为它比其它的更稳健。

应该指出的是快捷方式文件也可以通过命令行的几个工具(这反过来又可以从C#/。NET轻松调用)创建。 我从来没有尝试过任何人,但我会下手的NirCmd (NirSoft有Sysinternals的样质量工具)。

不幸的NirCmd无法解析快捷方式文件(仅适用于创建它们),但这一目的TZWorks LP似乎能。 它甚至可以设置其为CSV输出。 LNK分析器看起来也不错(它可以输出HTML和CSV)。



Answer 5:

类似IllidanS4的答案使用, Windows脚本宿主证明对我来说是最简单的解决方案(在Windows 8 64位测试)。

然而,而不是通过代码手动导入COM类型,它更容易只需添加COM类型库作为参考。 选择References->Add Reference...COM->Type Libraries ,找到并添加“Windows脚本宿主对象模型”。

这将导入命名空间IWshRuntimeLibrary ,从中你可以访问:

WshShell shell = new WshShell();
IWshShortcut link = (IWshShortcut)shell.CreateShortcut(LinkPathName);
link.TargetPath=TargetPathName;
link.Save();

幸得吉姆Hollenhorst 。



Answer 6:

donwload IWshRuntimeLibrary

您还需要导入COM库IWshRuntimeLibrary 。 右键点击你的项目 - >添加引用 - > COM - > IWshRuntimeLibrary - >添加,然后用下面的代码片段。

private void createShortcutOnDesktop(String executablePath)
{
    // Create a new instance of WshShellClass

    WshShell lib = new WshShellClass();
    // Create the shortcut

    IWshRuntimeLibrary.IWshShortcut MyShortcut;


    // Choose the path for the shortcut
    string deskDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
    MyShortcut = (IWshRuntimeLibrary.IWshShortcut)lib.CreateShortcut(@deskDir+"\\AZ.lnk");


    // Where the shortcut should point to

    //MyShortcut.TargetPath = Application.ExecutablePath;
    MyShortcut.TargetPath = @executablePath;


    // Description for the shortcut

    MyShortcut.Description = "Launch AZ Client";

    StreamWriter writer = new StreamWriter(@"D:\AZ\logo.ico");
    Properties.Resources.system.Save(writer.BaseStream);
    writer.Flush();
    writer.Close();
    // Location for the shortcut's icon           

    MyShortcut.IconLocation = @"D:\AZ\logo.ico";


    // Create the shortcut at the given path

    MyShortcut.Save();

}


文章来源: Creating application shortcut in a directory