Dav*_*vid 11 c# windows installaware winforms
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);
Run Code Online (Sandbox Code Playgroud)
任务栏中缺少应用程序图标.这只是一个空白的广场!
上面的代码适用于多个项目但是使用一个特定程序失败 - 我们称之为projectX.exe.我重新编写了projectX.exe的Main和启动方法,以便它们模仿另一个显示其图标的项目.
我已经试了好几天才发现原因,但却失败了.我尝试了各种想法,包括更改图标,在运行时更改它,以及切换是否应该显示.
如果我要求以管理员身份运行projectX.exe,则图标显示正常,但我的客户端无法使用该选项.
编辑2017年10月20日 如果我将'projectX.exe'的名称更改为其他名称,例如'test.exe',则图标会在任务栏中显示OK.存储在注册表中的程序的图标在哪里?
编辑2017 年10月22日按照建议刷新图标后,从文件资源管理器运行程序或创建快捷方式时,任务栏中不再显示该图标.
编辑2017年11月12日 运行程序"以管理员身份",图标将按预期显示在任务栏中.
如果我将'projectX.exe'的名称更改为其他内容...则图标显示OK.
这绝对是一个图标缓存引发的问题.目前还不是很清楚为什么重置它并没有帮助解决这个问题,但看起来你是手工完成它并且有办法不能正确地进行平移.
一些背景.这个问题在开发机器上很常见,程序员只有在调试和测试程序后才会处理chrome.资源管理器必须使用错误的图标查看其program.exe文件并将其复制到其缓存中.更改.exe不会强制它刷新缓存的副本,可以说是一个bug.缓存对于资源管理器来说非常重要,在文件夹视图中挖掘文件中的图标完整的文件可以在主轴驱动器上轻松地进行几秒钟.
缓存存储在文件中,而不是注册表中.你会在c:\ users\yourname\appdata\local\iconcache.db中找到它,请注意它是一个隐藏文件.Windows 8及更高版本使用带有多个图标*.db文件的更加漂亮的缓存方案,存储在c:\ users\yourname\appdata\local\microsoft\windows\explorer目录中.
删除这些文件足以强制资源管理器重新创建它们.但这并不一定是个好结果,您只能100%确定资源管理器通过在删除文件之前终止它来创建新副本.如果这些文件在执行此操作时打开了缓存文件,则其他进程可能会锁定这些文件,这通常是因为它们已加载了shell扩展.
我认为重置缓存的最佳方法是使用Ramesh Srinivasan的cleariconcache.vbs脚本,该脚本可从此网页获得.他的VBScript代码看起来令人信服,处理所有角落案件并尽职尽责地报告失败.关闭所有正在运行的程序,以获得最大的成功几率.
如果不充分了解您的环境,则很难诊断该问题。
然而,这听起来很可能是操作系统问题,而不是代码问题。
一种选择可能是以编程方式清除图标缓存,同时重新启动 explorer.exe,以下代码应该执行此操作:
foreach (Process exe in Process.GetProcesses())
{
if (exe.ProcessName.StartsWith("iexplore"))
exe.Kill();
}
// clear icon cache
strCmdText= "del %userprofile%\appdata\local\iconcache.db /a ";
Process.Start("CMD.exe",strCmdText);
Process.Start("explorer.exe");
}
Run Code Online (Sandbox Code Playgroud)
您的图标现在应该可见了。