C# 在WPF应用程序中创建快捷方式会损坏原始图标
所以我有一个非常令人沮丧的问题。我有一个用C#编写的WPF应用程序,运行Windows10(1703版,OS Build 15063.0),它为当前运行的可执行文件创建快捷方式。问题是,当我创建这些快捷方式时,我为快捷方式设置了不同的(自定义)图标。我不认为这会是一个问题,但下次我运行应用程序(从原始位置)时,它会显示我在任务栏中为快捷方式设置的自定义图标。只是任务栏。标题栏和任务管理器显示正确的图标和标题。我做错了什么?在这一点上,我认为这是一个Windows错误。我创建快捷方式的方法如下:C# 在WPF应用程序中创建快捷方式会损坏原始图标,c#,wpf,windows-10,wsh,desktop-shortcut,C#,Wpf,Windows 10,Wsh,Desktop Shortcut,所以我有一个非常令人沮丧的问题。我有一个用C#编写的WPF应用程序,运行Windows10(1703版,OS Build 15063.0),它为当前运行的可执行文件创建快捷方式。问题是,当我创建这些快捷方式时,我为快捷方式设置了不同的(自定义)图标。我不认为这会是一个问题,但下次我运行应用程序(从原始位置)时,它会显示我在任务栏中为快捷方式设置的自定义图标。只是任务栏。标题栏和任务管理器显示正确的图标和标题。我做错了什么?在这一点上,我认为这是一个Windows错误。我创建快捷方式的方法如下:
public void CreateShortcut(string name)
{
string AppDir = GetAppDataDir();
object shDesktop = (object)"Desktop";
WshShell shell = new WshShell();
string shortcutAddress = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\" + name + ".lnk";
IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutAddress);
shortcut.Description = "Play " + name + "!!";
shortcut.Hotkey = "Ctrl+Shift+N";
shortcut.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
shortcut.TargetPath = Directory.GetCurrentDirectory() + "/Catapult.exe";
shortcut.Arguments = "-play \"" + name + "\"";
shortcut.IconLocation = AppDir + "/Games/" + name + ".ico";
shortcut.Save();
}
看来我的解决方案是没有解决方案。在当前状态下,Windows不允许使用引用可执行文件的自定义图标创建快捷方式,而不会弄乱该可执行文件的现有图标。对我来说,这是不可接受的,因为我现在必须使用笨拙的代码来解决这个问题(没有比这更糟糕的了,对吗?)。Microsoft需要尽快在Explorer中修复这个奇怪的实现。我的解决方案似乎是没有解决方案。在当前状态下,Windows不允许使用引用可执行文件的自定义图标创建快捷方式,而不会弄乱该可执行文件的现有图标。对我来说,这是不可接受的,因为我现在必须使用笨拙的代码来解决这个问题(没有比这更糟糕的了,对吗?)。Microsoft需要尽快在Explorer中修复这个奇怪的实现。如果您共享一些代码,并指定您正在使用的操作系统,这样会更好。标题栏和任务管理器中显示的图标由流程本身提供。任务栏中显示的图标由资源管理器提供。启动流程时,没有预先确定的方法覆盖流程知道的图标。如果您是流程开发人员,可以使用命令行参数。@JoelLucsy使用命令行参数做什么?重新更改任务栏图标?现在我很困惑。您是希望任务栏成为程序自行管理的图标,还是希望任务栏成为您在快捷方式中提供的覆盖值?我假设是后者。如果需要前者,请在创建快捷方式时简单地将图标设置为exe。@JoelLucsy我需要程序在任务栏中显示正确的图标(它自己的)。目前没有出现这种情况,因为有一个快捷方式使用不同的图标引用可执行文件。如果您共享一些代码,并指定正在使用的操作系统等,则会更好。标题栏和任务管理器中显示的图标由进程本身提供。任务栏中显示的图标由资源管理器提供。启动流程时,没有预先确定的方法覆盖流程知道的图标。如果您是流程开发人员,可以使用命令行参数。@JoelLucsy使用命令行参数做什么?重新更改任务栏图标?现在我很困惑。您是希望任务栏成为程序自行管理的图标,还是希望任务栏成为您在快捷方式中提供的覆盖值?我假设是后者。如果需要前者,请在创建快捷方式时简单地将图标设置为exe。@JoelLucsy我需要程序在任务栏中显示正确的图标(它自己的)。这目前没有发生,因为有一个快捷方式引用了具有不同图标的可执行文件。您是否尝试过一些建议,当使用快捷方式启动时,覆盖图标是否有效?不管怎样,它没有做我认为它将要做的事情。@ScottChamberlain哈哈,是的,我读了它,我很困惑。无论如何,谢谢。你试过一些建议了吗?当用快捷方式启动时,覆盖图标有效吗?没关系,它没有做我认为它会做的事情。@ScottChamberlain哈哈,是的,我读了它,我很困惑。无论如何,谢谢你。