在桌面上创建的 .lnk 的执行上下文
Execution context of a .lnk created on desktop
我有一个在桌面上创建快捷方式的应用程序 A linked 到另一个应用程序 B。应用程序 B 在启动时必须检查是否需要更新某些文件并将其下载到 B 应用程序文件夹但是如果我从桌面上的快捷方式打开它,应用程序 B 会下载桌面上的所有更新文件。如果有办法告诉创建的 link 只是不要更改执行上下文,我已经搜索了答案。
在桌面创建.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);
}
link 不是问题所在。执行上下文始终是当前工作目录。
在您的B程序中,您必须指定要写入的B文件夹。您可以使用以下方式获取当前应用程序路径:
using System.Reflection;
string path = Assembly.GetExecutingAssembly().Location;
这是exe的路径。获取目录,可以换行:
using System.IO;
string folder = Path.GetDirectoryName(path);
我有一个在桌面上创建快捷方式的应用程序 A linked 到另一个应用程序 B。应用程序 B 在启动时必须检查是否需要更新某些文件并将其下载到 B 应用程序文件夹但是如果我从桌面上的快捷方式打开它,应用程序 B 会下载桌面上的所有更新文件。如果有办法告诉创建的 link 只是不要更改执行上下文,我已经搜索了答案。
在桌面创建.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);
}
link 不是问题所在。执行上下文始终是当前工作目录。
在您的B程序中,您必须指定要写入的B文件夹。您可以使用以下方式获取当前应用程序路径:
using System.Reflection;
string path = Assembly.GetExecutingAssembly().Location;
这是exe的路径。获取目录,可以换行:
using System.IO;
string folder = Path.GetDirectoryName(path);