在这里发布这篇文章,因为没有关于如何做到这一点的好例子,甚至MSDN也不清楚。
有许多例子,但没有一个(我发现)解决了软件关联图标覆盖的问题。
我的软件有不同的文件类型。我希望每个文件类型都有一个特定的图标,同时保持与我的软件的关联。
使用大多数方法,可以将图标分配给文件类型,但如果文件与软件相关联,则该图标将被该软件图标覆盖。
发布于 2022-08-31 02:15:28
这可以通过以下方式来完成:
var path = System.Reflection.Assembly.GetEntryAssembly().Location;
var icopath = "c:/whatever/icon.ico";
var softwareId = "MySoftware";
var ext = ".myfiletype";
bool isElevated = false;
using (WindowsIdentity identity = WindowsIdentity.GetCurrent())
{
WindowsPrincipal principal = new WindowsPrincipal(identity);
isElevated = principal.IsInRole(WindowsBuiltInRole.Administrator);
}
if (isElevated)
{
Registry.SetValue(@"HKEY_CLASSES_ROOT\" + ext, "", softwareId + ext);
Registry.SetValue(@"HKEY_CLASSES_ROOT\" + softwareId + ext + @"\DefaultIcon", "", icopath);
Registry.SetValue(@"HKEY_CLASSES_ROOT\" + softwareId + ext + @"\shell\open\command", null, path + " \"%1\"");
// refresh
SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero);
}
https://stackoverflow.com/questions/73554348
复制相似问题