2013-09-19 3 views
0

Ищет лучший способ сделать это сейчас, но нет ответов.Как переключить/toggel 2 приложения с таким же именем?

Я использую Windows XP и Delphi 6.

У меня есть в основном 2 приложения, которые я хочу, идентичный исходный код. Единственное отличие состоит в том, что приложение 2 рассматривает разные SQL-серверы для своих данных. SQL-сервер указан в файле .ini, который Delphi читает при запуске.

Моя проблема заключается в том, что я хотел бы иметь возможность переключаться с одного приложения на другое из самого приложения (приложение 1 переключается на приложение 2).

Я знаю, что я могу переименовать приложение перед компиляцией, но мне нужен исходный код тот же. Я также не могу переименовать файл .exe после компиляции, поскольку .ini-файл смотрит на это .exe-имя при запуске. Я попытался прочитать имя приложения из файла .ini, но опять же это не сработает.

Любая помощь будет отличной.

+1

Я бы [ 'register'] (HTTP: // MSDN .microsoft.com/en-us/library/windows/desktop/ms644947 (v = vs.85) .aspx) настраиваемое сообщение, которое я тогда передавал бы, и на его обработчике я бы привел экземпляр на передний план, но что, если там например, три экземпляра приложения? – TLama

+0

Если * единственная разница в том, что они смотрят на разные SQL-серверы, почему не просто одно приложение, которое отключает операции и подключение к Server1, а затем открывает подключение к Server2 и перезапускает операции? И есть два раздела INI [Server1] и [Server2]. –

+1

Идентичный исходный код ... два приложения, два сервера? Я не вижу никакой причины, что это не может быть просто одним приложением. –

ответ

5

Должно быть только одно приложение, которое переключает поведение во время выполнения.

Я бы расширил приложение, чтобы параметры файла .ini были переопределены аргументами командной строки. Если аргументы не указаны, значения берутся из файла .ini. Если аргументы указаны, они имеют приоритет над файлом .ini.

+3

Да, добавив параметр «Подключиться к ...», где-то даже разрешалось бы переключение во время работы без необходимости перезапуска. –

0

Если вам абсолютно необходимо придерживаться двух отдельных приложений, есть одно простое решение.

Создайте две отдельные папки, допустим, APP1 и APP2, затем скопируйте все файлы приложений (EXE, INI и все остальное, что требуется вашему приложению) в обе папки. Измените INI-файл APP1, чтобы указать на Server1 и файл INI APP2, чтобы указать на Server2.

Это решение предполагает, что INI-файл находится где-то в структуре папок приложения, и ваше приложение настроено на его чтение. Если это так, то ничего не нужно менять. Использование этого метода позволит вам одновременно работать с несколькими приложениями.

0

Вот два предложения:

A. Создайте приложение MDI. См. Пример delphi под названием MDIApp.dpr.

Ваш ChildMDI Windows будет кодом для каждой строки. Когда вы создаете окно MDIchild, прочитайте соответствующий .ini-файл, чтобы инициализировать окно MDICHild. Предполагается, что у вас будет мастер MDIApp.ini, который расскажет вам, сколько строк у вас есть и где определить, где взять файлы .ini для каждой строки. Так что в вашем файле .ini, если вы говорите, ваши 2 линии вы сказали бы

Lines=2 
;Then have an iterator to read the paths/parameters of the .ini file 
; to initialize Line Window 
IniFilePathForLine1= 
IniFilePathForLine2= 

Используйте Младенец Ini файлы для инициализации MDIChild окна

B. Чтение процессов, выполняющихся и довести его до передней

Проблема, которую я вижу в том, что вы описали, заключается в том, что все линии будут работать со всеми процессами/приложениями. то есть Line1 будет запускать приложение для Line1 и Line2.Два приложения на терминал. Я предполагаю, что эти приложения предназначены только для отображения и настройки, и настоящая работа выполняется в одном приложении в другом месте.

Прочитайте задачи/процессы, выполняемые на терминале, используя что-то вроде.

How to get applications from Windows Task manager (Applications Tab) + their locations on HDD from Delphi

Фильтр, что отображается на экране так что только ваши приложения появятся Затем довести его до передней

How to bring my application to the front?

Смежные вопросы