А может ли Wise или какой другой инсталлер сделать такую на первый взгляд простую вещь:
У меня есть в приложении некий текстовый файл.
Можно ли при инсталящии спросить параметер, затем зайти в этот текстовый файл, найти строку XXXX и заменить ее на значение этого параметра?
Wise , installshield ...
-
- Ник удалён за неоплаченную рекламу
- Posts: 479
- Joined: 21 May 2001 09:01
- Location: New York
-
- Уже с Приветом
- Posts: 8230
- Joined: 06 Feb 2002 10:01
- Location: NJ, USA
-
- Уже с Приветом
- Posts: 292
- Joined: 22 Jul 2002 04:03
- Location: Vl->Nsk->SFBA
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'ом и задача выполнена.
Работа освобождает.
-
- Ник удалён за неоплаченную рекламу
- Posts: 479
- Joined: 21 May 2001 09:01
- Location: New York
-
- Уже с Приветом
- Posts: 292
- Joined: 22 Jul 2002 04:03
- Location: Vl->Nsk->SFBA
berboris wrote:Так работает, но уж слищком сложно это.
Это только так кажется на первый взгляд. Есть аналогичный код на VBScript'е.
berboris wrote:Вот MSI скрипт есть возмжоность отредактировать файл,
Легко и просто.
Там вообще куча команд
НО, я только не могу понять как туда параметры передать...
1) Вот давайте сначала определимся, какую именно команду Вы хотите использовать. А дальше мы поймем как туда параметры передавать.
2) Какой версией какой программы для создания инсталяшек Вы пользуетесь?
Работа освобождает.
-
- Уже с Приветом
- Posts: 292
- Joined: 22 Jul 2002 04:03
- Location: Vl->Nsk->SFBA