FileInfo fi = new FileInfo(fileToExcecute);
Directory.SetCurrentDirectory(fi.DirectoryName);
ProcessStartInfo pInfo = new ProcessStartInfo();
pInfo.FileName = fileToExcecute;
pInfo.RedirectStandardOutput = false;
pInfo.RedirectStandardError = false;
pInfo.CreateNoWindow = false;
pInfo.UseShellExecute = true;
pInfo.WorkingDirectory = fi.DirectoryName;
if (runas)
pInfo.Verb = "runas";
pInfo.WindowStyle = ProcessWindowStyle.Normal;
Process p = Process.Start(pInfo);
任务栏中缺少应用程序图标。这只是一个空白的正方形!
上面的代码对于多个项目都可以正常工作,但是对于一个特定的程序却失败了 - 我们将其称为projectX.exe。我重写了 projectX.exe 的 Main 和启动方法,以便它们模仿另一个可以正常显示其图标的项目。
几天来我一直试图找出原因,但都以失败告终。我尝试了各种想法,包括更改图标、在运行时更改图标以及切换是否应显示。
如果我要求以管理员身份运行projectX.exe,图标显示正常,但该选项对我的客户不可用。
2017 年 10 月 20 日编辑如果我将“projectX.exe”的名称更改为其他名称(例如“test.exe”),则图标会在任务栏中显示“确定”。程序的图标存储在注册表中的哪里?
2017年10月22日编辑按照建议刷新图标后,从文件资源管理器运行程序或创建快捷方式时,任务栏中不再显示该图标。
2017 年 11 月 12 日编辑“以管理员身份”运行程序,该图标将按预期显示在任务栏中。
如果我将“projectX.exe”的名称更改为其他名称...则图标显示“正常”。
This is 确实图标缓存引发的问题。目前还不清楚为什么重置它无助于解决这个问题,但看起来你是手动完成的,并且有一些方法无法正确平移。
一些背景。这个问题在开发机器上很常见,程序员往往只有在对程序进行调试和测试后才处理镶边。资源管理器看到他们的program.exe 文件带有错误的图标,并将其复制到其缓存中。更改 .exe 不会强制它刷新缓存的副本,这可以说是一个错误。否则,缓存对于资源管理器来说非常重要,在主轴驱动器上,从充满文件的文件夹视图上的文件中挖掘图标可能需要几秒钟的时间。
缓存存储在文件中,而不是注册表中。你会在 c:\users\yourname\appdata\local\iconcache.db 中找到它,请注意它是一个隐藏文件。 Windows 8 及更高版本使用更奇特的缓存方案,其中包含多个 icon*.db 文件,存储在 c:\users\yourname\appdata\local\microsoft\windows\explorer 目录中。
删除这些文件足以强制资源管理器重新创建它们。但这并不一定会有好的结果,您只能 100% 确定资源管理器在删除文件之前终止它来创建新的副本。如果其他进程在您执行此操作时打开了缓存文件,则可能会锁定这些文件,通常是因为它们加载了 shell 扩展。
我认为重置缓存的最佳方法是使用 Ramesh Srinivasan 的 cleariconcache.vbs 脚本,该脚本可从这个网页 http://www.winhelponline.com/blog/how-to-rebuild-the-icon-cache-in-windows/。他的 VBScript 代码看起来非常正确,处理了所有极端情况并尽职尽责地报告失败。关闭所有正在运行的程序,以最大程度地提高成功率。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)