Хочу написать собственный инсталятор. Инсталироваться всё должно из одного ехе файла. Причём не обязательно ужимать файлы. Вообще-то планируется извлекать только один файл. Где бы глянуть на исходник по проще. Я пишу на С++.
Пробовал через ресурсы, но не получилось. Вот что вышло:
HGLOBAL hgl=NULL;
char * lpBuffer;
HRSRC rc=NULL;
HANDLE hUpdateRes;
BOOL result;
HANDLE hInputFile;
DWORD dwFileLength;
DWORD dwBytesRead,dwSize;
BYTE * pFileData = NULL;
hInputFile = CreateFile("c:\\Temp\\command.com",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
if(hInputFile == INVALID_HANDLE_VALUE)
{
NULL;
}
dwFileLength = GetFileSize(hInputFile,NULL);
pFileData = (BYTE*)malloc(dwFileLength);
if(!pFileData)
{
NULL;
}
ReadFile(hInputFile,pFileData,dwFileLength,&dwBytesRead,NULL);
hUpdateRes = BeginUpdateResource("foot.exe", FALSE);
if (hUpdateRes == NULL)
{
// ErrorHandler("Could not open file for writing.");
}
result = UpdateResource(hUpdateRes,MAKEINTRESOURCE(IDR_PEXE2),"RT_EXE",MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),pFileData,dwFileLength);
if (result == FALSE)
{
// ErrorHandler("Could not add resource.");
}
if (!EndUpdateResource(hUpdateRes, FALSE))
{
// ErrorHandler("Could not write changes to file.");
}
FreeResource(hgl);
Это было взято из нескольких источников,поэтому получилась каша, которая к тому же ещё и не работает.
Заранее спасибо.
TRANSSTR>Хочу написать собственный инсталятор
..........................
TRANSSTR>Заранее спасибо.
Так вопрос то в чём?
-------------------------------------------------------------------
Вызывает презедент к себе коров и говорит:
— Ну, что будем сдавать, молоко или мясо?
(с) Г. Явлинский TV6 — Герой дня (18.04.2002)
TRANSSTR>Хочу написать собственный инсталятор. Инсталироваться всё должно из одного ехе файла. Причём не обязательно ужимать файлы. Вообще-то планируется извлекать только один файл. Где бы глянуть на исходник по проще. Я пишу на С++.
При запуске она распаковывает кабинет во временный каталог, запускает программу setup.exe, которая должна быть в кабинете, и ждет пока она не закончится. Когда setup.exe завершается, содержимое временного каталога удаляется.
Здравствуйте Alex Fedotov, Вы писали:
AF>Здравствуйте TRANSiST0R, Вы писали:
TRANSSTR>>Хочу написать собственный инсталятор. Инсталироваться всё должно из одного ехе файла. Причём не обязательно ужимать файлы. Вообще-то планируется извлекать только один файл. Где бы глянуть на исходник по проще. Я пишу на С++. AF>Посмотри http://www.alexfedotov.com/samples/launch.zip, может поможет. AF>К этой программке в конец просто приписываешь .cab-файл: AF>copy launch.exe /B + mycab.cab /B installer.exe /B
Вариант аля предложенного Алексом Федотовым, делаем SFX архив, и все.
Вариант 2, если нужно что то более умное (в плане во время инсталляции еще что то хочется). Есть NSIS (Null Soft Installation Script) вот здесь www.hullsoft.com
Можно конечно было еще предложить и стандартный Microsoft’овый инсталлятор, но он может оказаться сильно большим для этой задачи. Но если что, про него читать в MSDN Library.
Так объясняю, что мне надо. Если прога запущена с ключом, она должна пихнуть себе в ресурсы фаил указанный в ключе.
Если прога запущена без ключей она должна найти на диске С: такой же файл как и в ресурсах и перезаписать его.
Можно и не в ресурсы а в конец файла. Я правда не знаю как это делают
У меня появилась другая идея встроить в прогу код, если пользователь её запустил с дискеты, то она сама не запускается, а только ищет свою копию и перезаписывает её собою.
Хотелось бы так же почитать, как пишутся инсталяторы. Где надыбать материал