Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема при запуске exe, Программа работает не со своим каталогом 
:(
    Опции темы
Mishail
Дата 7.8.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 3.5.2007

Репутация: нет
Всего: нет



Доброго всем дня!

Суть проблемы:
имеются две программы, требуется чтобы первая ("запускающая" MyProg.exe) запускала вторую ("запускаемую" test.exe).

В принципе все работает и запускается, однако test.exe (запускаемая) имеет конфигурационный файл (test.ini), который находится в том же каталоге где и сама программа, и:

1. Если запускаеть ее саму по себе  - то все работает нормально.
2. Если же через MyProg.exe - то (установлено опытным путем), запущенная программа (test.exe) "ищет" конфигурационный файл в каталоге запускающей ее программы (MyProg.exe).

Как побороть сие недоразумение?

Реализация:

test.exe
Код

// ищем ini в своем каталоге
GetPrivateProfileString("Sec","record","not ready",lpReturnedString,99,"./test.ini");


MyProg.exe (точнее MyProg.dll - если это принципиально)
Код


// варианты
//1
WinExec("test\\test.exe",SW_SHOW);  //Программа запускается ini не находится в папке test 
//2
ShellExecute(NULL,"open","\\test\\test.exe",NULL,NULL,SW_SHOW); //Программа запускается ini не находится в папке test 
ShellExecute(NULL,"open","\\test\\test.exe",NULL,"\\test",SW_SHOW); //Программа запускается ini не находится в папке test 


Как быть?
Может в test.exe организовать проверку в каком каталоге находится test.exe и его использовать в GetPrivateProfileString?
Но мне кажется должен быть и попроще путь.


С уважением, Михаил.
PM MAIL   Вверх
_hunter
Дата 7.8.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



а параметр  lpDirectory (Pointer to a null-terminated string that specifies the default directory) ShellExecute'а тебе ни о чем не говорит?..


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Mishail
Дата 7.8.2007, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 3.5.2007

Репутация: нет
Всего: нет



Говорит и, как я уже и писал:

Код

ShellExecute(NULL,"open","\\test\\test.exe",NULL,"\\test",SW_SHOW); 


т.е. указание в данном параметре пути (необходимо чтобы путь был относительным, без привязки к дискам и т.п.) - не возымело действия smile 

Желаемая иерархия такова:

Каталог MyProg.exe (вызывающая программа)
- подкаталог TEST (в нем test.exe и test.ini).

Может синтаксис не верен (слэши правильно расставлены?).


С уважением, Михаил. 
PM MAIL   Вверх
_hunter
Дата 7.8.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



Цитата(Mishail @  7.8.2007,  18:27 Найти цитируемый пост)
.е. указание в данном параметре пути 

естественно: путь должен быть полным.

Цитата(Mishail @  7.8.2007,  18:27 Найти цитируемый пост)
необходимо чтобы путь был относительным, без привязки к дискам и т.п

генерь этот путь сам: GetModuleFileName(GetModuleHandle(NULL)) в помощь...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Mishail
Дата 7.8.2007, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 3.5.2007

Репутация: нет
Всего: нет



Спасибо за поддержку smile 

Может "нерационально" но частично проблему решил.
В вызываемой программе путь к ini-файлу нахожу следующим образом:

Код

char lpReturnedString[100]; // данное объявление уже присутствовало в коде
char lpFileName[100]; 

GetModuleFileName(AfxGetApp()->m_hInstance, lpFileName, 99); // получаем полный путь
strncpy (lpReturnedString,lpFileName,strlen(lpFileName)-8); // урезаем на 8 знаков test.exe
// далее используем lpReturnedString в качестве пути


однако если в пути встречаются пробелы с рускоязычными папками - все идет наперекосяк smile 
подозреваю strlen в таких случаях считает неправильно smile 

Как быть smile , наверняка есть готовые решения - как из пути "вычесть" имя файла.

С уважением, Михаил.
PM MAIL   Вверх
SenkraD
Дата 7.8.2007, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 4
Всего: 23



Mishail, ну вот тебе вариант для ленивых здесь


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.