【问题标题】:Why does my console app not have an icon when started with Process.Start()?为什么我的控制台应用程序在使用 Process.Start() 启动时没有图标?
【发布时间】:2011-03-03 11:24:42
【问题描述】:

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

这可能是什么原因?

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

补充:我给下载的应用一个合适的图标。还是不行。 :(

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

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

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

【问题讨论】:

    标签: .net process icons


    【解决方案1】:

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

    无论 UseShellExecute 是否为真,这都有效。

    【讨论】:

    • 这个改动解决了我的问题!
    • 如果有人找到了解决此问题的其他方法,请分享它,因为它非常令人沮丧.. Win 10。
    • 我试图从 PowerShell 命令提示符运行控制台应用程序:Start-process -FilePath "C:\path\to\my.exe",而此应用程序在任务栏中没有应用程序图标。如果我通过双击运行my.exe,则会正确显示一个图标。上面的解决方法对我有用:当我传递一个额外的 -WorkingDirectory 参数时,它按预期工作:Start-process -WorkingDirectory "C:\path\to\" -FilePath "C:\path\to\my.exe"
    【解决方案2】:

    我想那个可下载的应用程序以前没有图标。但现在有,所以可能是 Windows 有缓冲图标,你只需要重新启动。我不知道。我只是尝试从另一个控制台应用程序运行一个控制台应用程序并显示图标。但是当我更改图标并重新编译应用程序时,我看到旧图标,直到我重新启动。所以很明显是windows问题

    【讨论】:

    • 我对此表示怀疑。临时文件夹具有随机名称。 Windows 在运行之前不需要触摸它的图标 - 然后它就已经完全下载了。
    【解决方案3】:

    此代码正常显示带有用户定义图标的控制台应用程序:

            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-,我认为图标分辨率(但是为什么当您手动启动它时应用程序在托盘上看起来正常)或者可能是安全权限?尝试从您的 winforms 应用启动带有良好图标的测试控制台应用。
    • 我刚刚尝试了一个新的非托管 C++ 应用程序 - 图标没有出现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    相关资源
    最近更新 更多