Связь exe и sys
Есть небольшие знания ASSemblera
Люди вот такая задача, мне нужно чтобы прога работала вместе с сус файлом, но мне нужно иметь один файл, может как-нибудь вставить код дрова?
Есть небольшие знания ASSemblera
Возьми свой sys-файл и запхай его в ресурс добовь к програме и тогда будет только одна exe, а когда нужно юзать sys витягиваешь его.
что такое ресурс и как его запхать?
Поподробней пожалуйста,
что такое ресурс и как его запхать?
Я тебе в понедельник могу Example скинуть как одну прогу запхать в другую, а потом витягнуть и юзать, просто я сеячас на роботе и не имею ни Delph'ов ни Builder'а.
А bioflash?
Кто-то обещал выложить исходник, ну и где?
А bioflash?
Привет zoh. Я вчера не смог тебе етого показать, потому что не било времени сделать пример, очень много дел, и по етому я тебе все подробно опишу (а проект в котором я ето делал очень большой чтоби в нем показивать где и что) ...
Сначала нужно твой sys-файл поместить в ресурс, ето можно зделать 2 способами:
1) Воспользоваться любим ResourceWorkshop, и запхать твой файл в новую секцию, например назвем ее SYSFILE.
2) Ето можна сделать ручками: пишеш такой файл PROJECT1.TXT и в нем такое:
project1 sysfile ...fullpath...\YourFile.sys
и тогда запускаеш: brcc.exe PROJECT1.TXT.
Когда ти воспользуешся одним с двух способов ти одержиш файл PROJECT1.RES. Тогда в cpp-файле, в котором ти будеш доступаться до sys-файла делаеш следующее:
после #include директив идут #pragma директиви и ти добавляеш такую строку:
#pragma resource "project1.res"
Далее в програме ти можеш через HInstance доступаться к ресурсу.
Я когда витягивал exe с exe я делал так:
// Витягиваю файл с ресурса и сохраняю на винт.
TResourceStream *Res;
Res = new TResourceStream((int)HInstance, "project1", "sysfile");
Res->SaveToFile("MyFile.exe");
Res->Free();
// Запускаю на исполнение.
PROCESS_INFORMATION p;
STARTUPINFO si;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWDEFAULT;
cmd = "Project1.exe " + "параметри командной строки, если они нужни (через пробел)";
CreateProcess(NULL, cmd.c_str(), NULL, NULL, false, CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &si, &p);
// Жду завершения исполнения exe-файла.
WaitForSingleObject(p.hProcess, INFINITE);
// Уничтожаю файл.
DeleteFile("MyFile.exe");
Если будут еще вопроси обращайся...
И ещё обьясни вот это:
--------------------------------------------
Ето можна сделать ручками: пишеш такой файл PROJECT1.TXT и в нем такое:
project1 sysfile ...fullpath...\YourFile.sys
и тогда запускаеш: brcc.exe PROJECT1.TXT.
Что значит project1 sysfile ...fullpath...
и brcc.exe
Я не знаю что такое ResourceWorkshop
И ещё обьясни вот это:
--------------------------------------------
Ето можна сделать ручками: пишеш такой файл PROJECT1.TXT и в нем такое:
project1 sysfile ...fullpath...\YourFile.sys
и тогда запускаеш: brcc.exe PROJECT1.TXT.
Что значит project1 sysfile ...fullpath...
и brcc.exe
Значит так:
1) brcc - Borland Resource Compiler, он знаходиться в директории ...Builder\Bin\brcc32.exe.
2) project1 sysfile ...fullpath... ето параметри для brcc-шки: project1 - ето им'я ресурсного файла на виходе, sysfile - ето назва секции в ресурсе, ...fullpath... - полний шлях к файлу, которий будет записан в нужную секцию.
ResourceWorkshop - ето програмка для создания/редактирования ресурсних файлов.
Теперь попробую на делфи.
Ещё парочка вопросов осталась:
1)Можно ли заресурсить 2 и более файлов?
2)в коде
cmd = "Project1.exe " + "параметри ...
выдаёт ошибку, какой там нужен тип?
P.S.
Ну вот вроде и всё.
Огромное спасибо, всё получилось!!!
Теперь попробую на делфи.
Ещё парочка вопросов осталась:
1)Можно ли заресурсить 2 и более файлов?
2)в коде
cmd = "Project1.exe " + "параметри ...
выдаёт ошибку, какой там нужен тип?
P.S.
Ну вот вроде и всё.
1) "Заресурсить" можно сколько угодно.
2) cmd - AnsiString можно било догадаться, потому-что потом я юзаю cmd.c_str().
Будут вопроси обращайся!!!
project1 exefile C:\z.exe
Что к этому дописать нужно?
Что-то не получается с 2 файлами, приведи пример:
project1 exefile C:\z.exe
Что к этому дописать нужно?
Значит так: у меня нету ни Builder'а ни Delpho'в. Ставить я их тоже не собираюсь, потому-что без надобности. Я рекомендую - поексперементируй и всьо вийдет.
А если серйозно, то не парся и скачай где-то ResourceWorkshop - рульная вещь. Может имееш VS, то там она точно есть.
Слушай а если прога не под Windows консольное пахать будет?
И как сделать чтоб окно консоли не высвечивалась во время исполнении.
Также недостаток в запуске ресурса.
Когда запустил процесс нельзя выйти из своей проги пока не закрыть созданную.
Даже если она не работает а дремлит(отображает форму)
Нельзя например отработав этой программой запустить ресурс а исходную закрыть.
Но я ещё покапаюсь и ещё чё нибудь скажу.
До меня долшло, просто надо подключать несколько ресурсов (вот гадость).
Слушай а если прога не под Windows консольное пахать будет?
И как сделать чтоб окно консоли не высвечивалась во время исполнении.
Также недостаток в запуске ресурса.
Когда запустил процесс нельзя выйти из своей проги пока не закрыть созданную.
Даже если она не работает а дремлит(отображает форму)
Нельзя например отработав этой программой запустить ресурс а исходную закрыть.
Но я ещё покапаюсь и ещё чё нибудь скажу.
Обясняю еще раз: ЗДЕЛАТЬ МОЖНО ВСЕ, ТОЛЬКО НУЖНО ЗНАТЬ ЧТО ТИ ХОЧЕШЬ ЗДЕЛАТЬ...
WaitForSingleObject(p.hProcess, INFINITE); - ета строка обясняет как исходная програма поводит себя относительно той какую она запускает. INFINITE - значит ждать завершения роботи запустившейся проги, можно дать иной час, почитай мануал. Или забери ету строку если ждать не нужно :D
Слушай а если прога не под Windows консольное пахать будет?
В командной строке:
В project1.txt смотрим разделы imports. Если твоя ОС реализует все эти функции - работать будет.