Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > InstallAware 6-установленная программа не видит


Автор: santey 10.11.2007, 13:18
Был создан проект с финишным диалоговым окном, где было предложено запустить программу.
Инсталляция была запущена, в конце установки появилось финишное окно и была выбрана 
опция запуска программы после окончания установки, программа запустилась из того каталога куда была установлена со всеми файлами настройки, а вот читать эти файлы она отказывается, то есть как будто бы этих файлов в каталоге нет.
Вообще странно. Ничего не пойму, может кто-нибудь знаком с этой проблемой.

Автор: jonie 10.11.2007, 14:47
хочешь написать свой инсталятор на С++ ?

Автор: santey 10.11.2007, 17:10
Да нет не хочу.
Просто создал проект инсталляции программы, а она сразу после установки запускаясь не видит ни файлов настройки в этом же каталоге ни других файлов....

Автор: dumb 10.11.2007, 19:13
путь к своим файлам настройки надо получать из полного имени твоего .exe-файла, которое можно получить из argv[0] или GetModuleFileName(NULL...
инсталлятор, скорее всего, запускает твою программу из папки пользователя (что-то типа C:\documents and settings\vasya)

Автор: santey 10.11.2007, 19:56
Я так понимаю эту функцию надо вставить в 
"Command Line Parameters:"

Код

DWORD WINAPI GetModuleFileName(
  HMODULE hModule,
  LPTSTR lpFilename,
  DWORD nSize
);


Так, а что прописывать в аргументах функции

GetModuleFileName(NULL,,);
Путь то неизвестен, путь тот, который выберет пользователь,
и размер тоже неясен.

Автор: dumb 10.11.2007, 20:15
Цитата(santey @  10.11.2007,  19:56 Найти цитируемый пост)
Я так понимаю эту функцию надо вставить в "Command Line Parameters:"
неправильно понимаешь. эту функцию надо вызывать в твоей программе.

это вариант исправления "неправильно написанной" программы, когда обращение к "своим" файлам происходит без указания полного пути(типа fopen("myprog.ini"...):
Код

// процедура устанавливает текущим тот каталог, где лежит наш .exe
// (запускать лучше в самом начале выполнения программы)
void SetProjectDir()
{
    char exeDir[MAX_PATH];
    if (::GetModuleFileName(0, exeDir, MAX_PATH))
    {
        char *pn = strrchr(exeDir, '\\');
        if (pn)
        {
            *pn = 0;
            chdir(exeDir);
        }
    }
}

Автор: santey 11.11.2007, 00:24
Я определял каталог GetCurrentDir(); перед запуском программы,
похоже, что InstallAware 6, кривой, как оказалось программа запускается
в несуществующем каталоге Users/ehtos/Temp/.....
бред какой-то.
Самое интересное, что InstallAware лицензионный.  smile 
написал янкам, а они молчат уже сутки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)