Wise , installshield ...

berboris
Ник удалён за неоплаченную рекламу
Posts: 479
Joined: 21 May 2001 09:01
Location: New York

Post by berboris »

А может ли Wise или какой другой инсталлер сделать такую на первый взгляд простую вещь:

У меня есть в приложении некий текстовый файл.

Можно ли при инсталящии спросить параметер, затем зайти в этот текстовый файл, найти строку XXXX и заменить ее на значение этого параметра?
User avatar
Uzito
Уже с Приветом
Posts: 8230
Joined: 06 Feb 2002 10:01
Location: NJ, USA

Post by Uzito »

berboris wrote:А может ли Wise или какой другой инсталлер сделать такую на первый взгляд простую вещь:

У меня есть в приложении некий текстовый файл.

Можно ли при инсталящии спросить параметер, затем зайти в этот текстовый файл, найти строку XXXX и заменить ее на значение этого параметра?


Да.
User avatar
WPooh
Уже с Приветом
Posts: 292
Joined: 22 Jul 2002 04:03
Location: Vl->Nsk->SFBA

Post by WPooh »

berboris wrote:Можно ли при инсталящии спросить параметер, затем зайти в этот текстовый файл, найти строку XXXX и заменить ее на значение этого параметра?

Custom Action для Windows Installer'а у меня выглядит примерно так (некоторые детали опущены, но смысл, думаю, понятен, если вы с C++ знакомы):

Code: Select all

bool replaceSubstringInFile(const t_string &configFile, const t_string &patternToReplace, const t_string &stringValue)
{
   char * buff = NULL;
   try {
      HANDLE hfConfig = CreateFile(configFile.c_str(), GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
      DWORD fSize = GetFileSize(hfConfig, NULL);
      buff = new char[fSize];
      DWORD dwRead=0;
      if (ReadFile(hfConfig, buff, fSize, &dwRead, NULL))
      {
         t_string txt(buff, 0, fSize);
         t_string newTxt = strreplace(txt, patternToReplace, stringValue);
         DWORD dwWriten=0;
         SetFilePointer(hfConfig, 0, 0, FILE_BEGIN);
         if (WriteFile(hfConfig, newTxt.c_str(), (DWORD)newTxt.length(), &dwWriten, NULL)) {
            SetEndOfFile(hfConfig);
            CloseHandle(hfConfig);
            return true;
         }
      }
      return false;
   } catch (...) {
      if (buff)
         delete[] buff;
      return false;
   }
}

extern "C" UINT __declspec(dllexport) __stdcall correctPhpIni(MSIHANDLE hdl)
{
#if defined(DEBUG)
   MessageBox(NULL, "Prepared for debug correctPhpIni", "status", 0);
#endif
   t_string installDir = MSIUtils::getProperty(hdl, CADATA);
   t_string configFile = pathCombine(installDir, _T("my_super_puper_directory\\php.ini"));
   if (replaceSubstringInFile(configFile, t_string(_T("@@PARAM_TO_REPLACE@@")), instDir))
      return 0;
   else
      return 1;
}

Это компиляется в dll'ку. Еще пару притопов с прихлопами в инсталяшке для вызова функции в транзакционной части Windows Installer'ом и задача выполнена. :gen1:
Работа освобождает.
berboris
Ник удалён за неоплаченную рекламу
Posts: 479
Joined: 21 May 2001 09:01
Location: New York

Post by berboris »

Так работает, но уж слищком сложно это.
Вот MSI скрипт есть возмжоность отредактировать файл,
Легко и просто.
Там вообще куча команд
НО, я только не могу понять как туда параметры передать...
User avatar
WPooh
Уже с Приветом
Posts: 292
Joined: 22 Jul 2002 04:03
Location: Vl->Nsk->SFBA

Post by WPooh »

berboris wrote:Так работает, но уж слищком сложно это.

Это только так кажется на первый взгляд. Есть аналогичный код на VBScript'е.
berboris wrote:Вот MSI скрипт есть возмжоность отредактировать файл,
Легко и просто.
Там вообще куча команд
НО, я только не могу понять как туда параметры передать...

1) Вот давайте сначала определимся, какую именно команду Вы хотите использовать. А дальше мы поймем как туда параметры передавать.
2) Какой версией какой программы для создания инсталяшек Вы пользуетесь?
Работа освобождает.
User avatar
WPooh
Уже с Приветом
Posts: 292
Joined: 22 Jul 2002 04:03
Location: Vl->Nsk->SFBA

Post by WPooh »

Чтобы шустрее разобраться в частной проблеме, давайте перейдем в ЛС, я Вам свои контакты дам.
Работа освобождает.

Return to “Вопросы и новости IT”