为什么我的控制台应用程序在使用Process.Start()启动时没有图标?

时间:2011-03-03 11:24:43

标签: .net process icons

我有一个应用程序将.exe下载到临时文件夹并使用System.Diagnostics.Process类运行它。到目前为止,我已经运行了两个不同的应用程序。一个是控制台应用程序,另一个是完整的Windows应用程序。 Windows应用程序在任务栏/标题栏中有其图标,但控制台应用程序只有一个通用的应用程序图标。如果我导航到临时文件夹,控制台应用程序确实有其图标;并且“手动”运行它(在资源管理器中双击)也会为它提供正确的图标。

这可能是什么原因?

其他信息:ProcessStartInfo类不提供有关图标的任何标记。我正在使用UseShellExecute=trueErrorDialog=true运行该流程。此外,Windows应用程序已启动最大化,但控制台应用程序已最小化(由WindowStyle成员ProcessStartInfo指定)。最后,控制台应用程序的图标仅包含一个32x32x4bpp图标,而Windows应用程序可以选择多种不同的格式。

已添加:我为下载的应用提供了一个合适的图标。仍然没有去。 :(

已添加2:哦,对,Windows 7 x64。

更新:刚试了一些实验。我创建了一个新的C ++(非托管,而不是.NET)应用程序,只需“按任意键继续”,并给它一个图标。该图标通常在资源管理器中显示,当我从资源管理器中运行时,该图标位于窗口标题栏中。

然而,当我从Visual studio启动应用程序时(通过F5或Ctrl-F5);或者当我通过另一个.NET应用程序和Process.Start()运行应用程序时 - 图标不会出现。为什么呢?

3 个答案:

答案 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中使用的图标文件包含所有分辨率。

因此我认为问题来源可能在:

  1. ico文件中没有正确的分辨率图像(但为什么当你手动启动它时,app通常会在托盘上显示?)
  2. 安全权限