C# 在桌面上创建的.lnk的执行上下文

C# 在桌面上创建的.lnk的执行上下文,c#,execution,desktop-shortcut,C#,Execution,Desktop Shortcut,我有一个应用程序A,它在桌面上创建一个链接到另一个应用程序B的快捷方式。启动时,应用程序B必须检查是否需要更新某些文件并将其下载到B应用程序文件夹,但如果我从桌面上的快捷方式打开它,应用程序B将下载桌面上所有更新的文件。我已经搜索了答案,是否有办法告诉创建的链接不要更改执行上下文 在桌面上创建.lnk的代码如下: Type t = Type.GetTypeFromCLSID(new Guid("72C24DD5-D70A-438B-8A42-98424B88AFB8")); //Windows

我有一个应用程序A,它在桌面上创建一个链接到另一个应用程序B的快捷方式。启动时,应用程序B必须检查是否需要更新某些文件并将其下载到B应用程序文件夹,但如果我从桌面上的快捷方式打开它,应用程序B将下载桌面上所有更新的文件。我已经搜索了答案,是否有办法告诉创建的链接不要更改执行上下文

在桌面上创建.lnk的代码如下:

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(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)+"/"+string.Format("{0}.lnk", Name));
            try
            {
                lnk.TargetPath = Path;
                lnk.IconLocation = Path+", 0";
                lnk.Save();
            }
            finally
            {
                Marshal.FinalReleaseComObject(lnk);
            }
        }
        finally
        {
            Marshal.FinalReleaseComObject(shell);
        }

链接不是问题所在。执行上下文始终是当前工作目录

在B程序中,必须指定要写入的B文件夹。您可以使用以下命令获取当前应用程序路径:

using System.Reflection;

string path = Assembly.GetExecutingAssembly().Location;
这是exe的路径。要获取目录,可以将其包装:

using System.IO;

string folder = Path.GetDirectoryName(path);

非常感谢。这很好用。我试图更好地理解捷径行为,但我认为这是解决这个问题的更好方法。干杯