it-swarm.dev

디렉토리에 응용 프로그램 바로 가기 만들기

C # 또는 .NET 프레임 워크를 사용하여 응용 프로그램 바로 가기 (.lnk 파일)를 작성하는 방법

결과는 지정된 응용 프로그램 또는 URL에 대한 .lnk 파일입니다.

70
Chasler

내가 좋아했던 것처럼 간단하지는 않지만 훌륭한 클래스 호출이 있습니다. ShellLink.cs at 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);
    }
}
61
Chasler

좋고 깨끗합니다. (. 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);
}
49
IllidanS4

나는 이와 같은 것을 발견했다 :

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의 기사 "url-link-to-desktop")의 원본 코드

14
Anuraj

IllidanS4의 답변 과 유사하게 Windows Script Host 를 사용하는 것이 가장 쉬운 해결 책임을 증명했습니다 (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();

신용은 Jim Hollenhorst에게갑니다 .

1
Steven Jeuris

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

}
1
AZ_

SO에서 찾은 모든 가능성을 조사한 후 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;
    ...
}

저자 (Mattias Sjögren, MS MVP)는 단순하고 효과적 일뿐만 아니라 일종의 COM/PInvoke/Interop 전문가이며, 그의 코드를 숙독하는 것이 대안보다 더 강력하다고 생각합니다.

바로 가기 파일은 여러 명령 줄 유틸리티 (C # /. NET에서 쉽게 호출 할 수 있음)로 만들 수도 있습니다. 나는 그들 중 어느 것도 시도하지 않았지만 NirCmd (NirSoft에는 SysInternals와 같은 품질 도구가 있습니다)로 시작합니다.

불행히도 NirCmd는 바로 가기 파일을 구문 분석 할 수는 없지만 (만 생성) 그 목적으로 TZWorks lp 가 가능합니다. 심지어 출력을 csv로 형식화 할 수도 있습니다. lnk-parser 보기에도 좋습니다 (HTML과 CSV를 모두 출력 할 수 있습니다).

1
Ohad Schneider