右键任务栏中应用程序图标时会显示程序名称,例如:
这里显示的并不是程序文件名DingTalk,而是文件属性中详细信息选显卡下的“文件说明”。
在.NET桌面程序中,是通过修改程序集名称(AssemblyTitle
)来设置该值,C++
程序则是添加版本信息设置FileDescription
属性。但是,这个属性和应用程序图标一样,会被缓存到系统注册表中。当第一次右键查看任务栏中程序图标时,会在注册表添加缓存记录。系统优先读取注册表中缓存的信息。因此,在.NET
程序中修改了程序集名称后需要删除对应的注册表项。具体信息是MuiCache
中{程序绝对路径}.FriendlyAppName
的注册表项
HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache
C:\Program Files (x86)\DingDing\main\current\DingTalk.exe.FriendlyAppName
如果注册表中已经注册过名称,但注册的名称与想要的不一致,也可以通过Microsoft.Win32.Registry
类来访问和修改Windows
注册表。以下是一个示例代码,用于判断并修改注册表中的值:
using Microsoft.Win32;
using System;
class Program
{
static void Main(string[] args)
{
const string registryKey = @"HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache";
const string valueName = @"C:\Program Files (x86)\DingDing\main\current\DingTalk.exe.FriendlyAppName";
const string newValue = "New Friendly App Name";
// 判断注册表中是否存在指定的键和值,如果不存在或值不一样则修改
if (!object.Equals(Registry.GetValue(registryKey, valueName, null), newValue))
{
// 修改注册表中的值
Registry.SetValue(registryKey, valueName, newValue);
Console.WriteLine("Value modified successfully.");
}
else
{
Console.WriteLine("Value does not exist in the registry.");
}
}
}
需要注意,上述代码中的registryKey
和valueName
变量需要根据你的实际情况进行修改。另外,请确保以管理员身份运行该程序,以便具有足够的权限来修改注册表。