Почему у моего консольного приложения нет значка при запуске с Process.Start ()? - PullRequest
5 голосов
/ 03 марта 2011

У меня есть приложение, которое загружает .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() - значок не появляется. Почему?

Ответы [ 3 ]

2 голосов
/ 31 мая 2012

Я не уверен, почему это происходит, но обходной путь заключается в том, чтобы установить для WorkingDirectory в структуре ProcessStartInfo каталог EXE.

Это работает независимо от того, является ли UseShellExecute истинным или нет.

0 голосов
/ 03 марта 2011

Этот код обычно показывает консольное приложение с пользовательским значком:

        Process p = new Process();

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

        p.Start();

Файл значка, используемый в моем ConsoleApplication1.exe, включает все разрешения.

Поэтому я думаю, что источником проблемы может быть:

  1. В ico-файле отсутствует правильное разрешение изображения (но почему при его запуске приложение выглядит нормально на панели задач?)
  2. Разрешения безопасности
0 голосов
/ 03 марта 2011

Я полагаю, что в загружаемом приложении ранее не было иконки.Но теперь он есть, так что, возможно, значок буферизован в Windows, и вам просто нужно перезагрузиться.Я не уверен.Я просто попытался запустить одно консольное приложение из другого, и на экране появились значки.Но когда я изменил значок и перекомпилировал приложения, я видел старый значок до перезагрузки.Так что, очевидно, проблема Windows

...