Запустить внешний exe в собственном процессе

У меня есть исполняемый файл VB6, который мы используем как исполняемый файл Starter для нашей реальной программы.

Проблема в том, что Windows 7 показывает новый значок на панели задач для нового процесса вместо того, который я щелкнул, чтобы запустить свою программу (конечно, потому что стартовый exe уже закончился, а новый exe кажется новым программа).

В настоящее время я использую объект Shell для запуска другого exe. Есть ли лучший способ сделать это из vb6, возможно, используя встроенную функцию C с объявлением, которая запускает exe в текущем процессе, не порождая новый процесс?

РЕДАКТИРОВАТЬ:

Спасибо atzz за отличную информацию об идентификаторах моделей приложений. Теперь у меня есть ярлык для запуска моего приложения с четко определенным идентификатором, и мое приложение также устанавливает идентификатор при запуске, и теперь оно доступно из правого значка на панели инструментов. Однако остаются две проблемы:

  1. Это приложение Java, запускаемое с Exe4J, и у меня нет возможности установить AppID до того, как Exe4J покажет экран-заставку, поэтому при отображении экрана-заставки на панели задач есть второй значок.

  2. Если я не перетащу вручную значок начального приложения с рабочего стола на панель инструментов, а вместо этого использую значок приложения и установлю его как «липкий», то будет закреплено реальное приложение, а не средство запуска.

Обе проблемы были бы прекрасно решены, если бы моя программа запуска запускала приложение из своего собственного процесса. Я слышал что-то об использовании exec () вместо fork () для программ Linux, чтобы добиться этого ... есть ли что-то подобное для Windows?


person Daniel    schedule 25.02.2011    source источник
comment
Я не знаю, как запустить другой исполняемый файл в текущем процессе. Зачем вам нужно использовать отдельное приложение-загрузчик, написанное на VB 6? Какую проблему это решает?   -  person Cody Gray    schedule 25.02.2011
comment
Проблема в том, чтобы проверить наличие обновлений. Если я проверю это в основном исполняемом файле, я не смогу перезаписать его сам. Кроме того, это гарантирует, что главный исполняемый файл с ошибками всегда может быть обновлен.   -  person Daniel    schedule 25.02.2011
comment
Вы, вероятно, не хотите идти по пути, когда запущенный процесс переключает фактический исполняемый код в нем на машине Windows. Есть способы, но любой сканер вирусов / вредоносных программ просто сойдет с ума (в основном ваша проблема прекрасно описывает, как вредоносный код может попытаться распространиться). Придерживайтесь лаунчера - это вполне приемлемое решение для описанной вами ситуации / целей.   -  person ktharsis    schedule 03.03.2011
comment
Я не хочу вводить код, я просто хочу установить идентификатор модели пользователя приложения для другого процесса! Для этого должен быть API ...   -  person Daniel    schedule 03.03.2011


Ответы (2)


Я считаю, что есть способ выполнить то, что вам нужно, с помощью API панели задач Windows 7, хотя сам я этого никогда не делал и поэтому недостаточно четко помню, что я читал по этому поводу. Посмотрите вокруг концепции Application ID.

Некоторые ссылки:

person atzz    schedule 25.02.2011
comment
+1 Отличный ответ, я верю, что когда буду возиться с идентификатором приложения, я смогу получить то, что хочу. Опубликую свое решение, когда закончу. - person Daniel; 25.02.2011
comment
@ Даниэль - вау, это было неожиданно! не то чтобы я жалуюсь, заметьте :) - person atzz; 05.03.2011
comment
Лучше, чем сбрасывать очки * g ... Если ты не хочешь их, просто начни награду и отдай их мне;) ... шучу. - person Daniel; 05.03.2011

Если проблема в значке, почему бы не дать обеим программам одинаковый значок (и одно и то же App.Title). Тогда пользователь не сможет отличить две записи на панели задач. Предположительно, они оба не видны одновременно.

В качестве альтернативы настройте стартовое приложение так, чтобы оно не отображалось на панели задач (свойство формы ShowInTaskbar = False в представлении конструктора)

person MarkJ    schedule 25.02.2011
comment
Ага, согласен. Второе решение кажется самым простым. Единственным недостатком является то, что что-то не отображается на панели задач пользователя сразу после запуска приложения. Я полагаю, вам придется принимать решение, основываясь на том, сколько работы выполняет вспомогательное приложение и сколько времени требуется для загрузки реального приложения. - person Cody Gray; 25.02.2011
comment
Проблема в том, что обычно, когда на панели задач есть липкий ярлык, работающее приложение отображается как рамка кнопки (?) Вокруг ярлыка. Если у приложения есть собственный исполняемый файл и процесс, на панели задач появляется другой значок. - person Daniel; 25.02.2011
comment
Итак, проблема специфична для специальной панели задач Windows 7. В этом случае перейдите к ответу atzz - person MarkJ; 25.02.2011