我有一个应用程序将.exe下载到临时文件夹并使用System.Diagnostics.Process
类运行它。到目前为止,我已经运行了两个不同的应用程序。一个是控制台应用程序,另一个是完整的Windows应用程序。 Windows应用程序在任务栏/标题栏中有其图标,但控制台应用程序只有一个通用的应用程序图标。如果我导航到临时文件夹,控制台应用程序确实有其图标;并且“手动”运行它(在资源管理器中双击)也会为它提供正确的图标。
这可能是什么原因?
其他信息:ProcessStartInfo
类不提供有关图标的任何标记。我正在使用UseShellExecute=true
和ErrorDialog=true
运行该流程。此外,Windows应用程序已启动最大化,但控制台应用程序已最小化(由WindowStyle
成员ProcessStartInfo
指定)。最后,控制台应用程序的图标仅包含一个32x32x4bpp图标,而Windows应用程序可以选择多种不同的格式。
已添加:我为下载的应用提供了一个合适的图标。仍然没有去。 :(
已添加2:哦,对,Windows 7 x64。
更新:刚试了一些实验。我创建了一个新的C ++(非托管,而不是.NET)应用程序,只需“按任意键继续”,并给它一个图标。该图标通常在资源管理器中显示,当我从资源管理器中运行时,该图标位于窗口标题栏中。
然而,当我从Visual studio启动应用程序时(通过F5或Ctrl-F5);或者当我通过另一个.NET应用程序和Process.Start()
运行应用程序时 - 图标不会出现。为什么呢?
答案 0 :(得分:2)
我不确定为什么会这样,但解决方法是将ProcessStartInfo结构中的WorkingDirectory设置为EXE的目录。
无论UseShellExecute是否为真,这都有效。
答案 1 :(得分:0)
我认为可下载的应用程序以前没有图标。但现在已经有,所以可能是Windows缓存图标,你只需要重新启动。我不确定。我只是尝试从另一个运行一个控制台应用程序并显示图标。但是当我更改图标并重新编译应用程序时,我看到了旧图标,直到我重新启动。所以它显然是Windows问题
答案 2 :(得分:0)
此代码通常显示带有用户定义图标的控制台应用程序:
Process p = new Process();
p.StartInfo = new ProcessStartInfo("ConsoleApplication1.exe")
{
UseShellExecute = true,
ErrorDialog = true,
WindowStyle = ProcessWindowStyle.Minimized
};
p.Start();
我的ConsoleApplication1.exe中使用的图标文件包含所有分辨率。
因此我认为问题来源可能在: