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

6
我有一个应用程序,它将一个.exe文件下载到临时文件夹并使用System.Diagnostics.Process类运行它。到目前为止,我已经用它运行了两个不同的应用程序。其中一个是控制台应用程序,另一个是完整的Windows应用程序。Windows应用程序在任务栏/标题栏中有它的图标,但控制台应用程序只有一个通用的应用程序图标。如果我导航到临时文件夹,控制台应用程序确实有它的图标;而手动运行它(在资源管理器中双击)也会给它正确的图标。
这可能是什么原因?
附加信息:ProcessStartInfo类没有提供任何关于图标的标志。我使用UseShellExecute=true和ErrorDialog=true运行进程。此外,Windows应用程序启动后最大化,但控制台应用程序被最小化(由ProcessStartInfo的WindowStyle成员指定)。最后,控制台应用程序的图标仅包含32x32x4bpp图标,而Windows应用程序具有多种不同的格式。
添加:我为下载的应用程序提供了适当的图标。仍然不行。:(
添加2:哦,对了,Windows 7 x64。
更新:刚刚尝试了更多实验。我创建了一个新的C++(非托管,而不是.NET)应用程序,里面只有“按任意键继续”的内容,并给它一个图标。图标在资源管理器中正常显示,当我从资源管理器运行它时,图标出现在窗口标题栏中。
然而,当我从Visual Studio启动应用程序(通过F5或Ctrl-F5);或者当我通过另一个.NET应用程序和Process.Start()运行应用程序时-图标不会出现。为什么?
3个回答

3

我不确定为什么会发生这种情况,但一个解决方法是将ProcessStartInfo结构中的WorkingDirectory设置为exe文件所在的目录。

无论UseShellExecute是否为true,这种方式都有效。


这个修改在我的情况下解决了问题! - anion
1
如果有人找到了另一种解决方法,请分享,因为这真的很令人沮丧...Win 10。 - David
我试图从PowerShell命令提示符中运行控制台应用程序:Start-process -FilePath "C:\path\to\my.exe",但是该应用程序在任务栏中没有应用程序图标。如果我通过双击运行my.exe,则图标会正确显示。上述解决方法对我有效:当我传递一个额外的-WorkingDirectory参数时,它按预期工作: Start-process -WorkingDirectory "C:\path\to\" -FilePath "C:\path\to\my.exe" - Roganik

0

这段代码展示了带有用户自定义图标的控制台应用程序:

        Process p = new Process();

        p.StartInfo = new ProcessStartInfo("ConsoleApplication1.exe")
            {
                UseShellExecute = true,
                ErrorDialog = true,
                WindowStyle = ProcessWindowStyle.Minimized
            };

        p.Start();

我的ConsoleApplication1.exe中使用的图标文件包含所有分辨率。

因此,我认为问题的源头可能在于:

  1. ico文件中没有正确的分辨率图像(但是为什么手动启动应用程序时托盘上的应用程序看起来正常?)
  2. 安全权限

这基本上是我使用的代码。不知道为什么会有差异。也许确实是图标分辨率的原因? - Vilx-
@Vilx-,我认为这可能是图标分辨率的问题(但为什么手动启动应用程序时托盘上的应用程序看起来正常),或者可能是安全权限的问题?尝试从你的WinForms应用程序中启动带有良好图标的测试控制台应用程序。 - acoolaum
我刚用一个新的未托管的 C++ 应用程序尝试了一下,但图标没有显示出来。 - Vilx-

0

我猜之前可下载的应用程序没有图标。但现在有了,所以可能是Windows已经缓存了图标,你只需要重新启动一下电脑。我不确定。我刚试着从一个控制台应用程序运行另一个控制台应用程序,图标就显示出来了。但当我改变图标并重新编译应用程序时,我看到的是旧图标,直到我重新启动电脑。所以这显然是Windows的问题。


我怀疑这个。临时文件夹的名称是随机的。Windows在运行之前不需要触摸它的图标 - 然后它已经完全下载了。 - Vilx-

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接