Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как из приложения создать другое приложение [D5]


Myth ©   (2002-02-27 23:30:00) 

Доброе время суток!
Подскажите, пожалуйста, каким образом можно реализовать следующее:
При запуске “My project.exe” файла должен создаться другой exe-файл в другой директории (например – “Second_Project.exe”), при выполнении которого пусть выйдет хотя бы пустая форма.
Что я должен прописать в своем проекте “My project”. (Пожалуйста, в примере).
Можно, конечно, “кинуть” оба проекта в установочный пакет с разносом в разные директории, но это не тот вариант.
Мой e-mail: flawless@aport.ru


VuDZ   (2002-03-02 16:21:00) [1]

http://upx.sourceforge.net- тут исходники, так что если ког интерисует эта тма - u"re welcome :>


VuDZ   (2002-03-02 16:16:00) [2]

советую посмотреть исходники UPX - там и сжатие файла, и запуск его из друго без создания видимых файлов. Вспомню линк - скажу


[NIKEL]   (2002-03-02 08:59:00) [3]

вот примерный код
1. стартуй блокнот и делай rc файл с такой строчкой
TESTFILE EXEFILE C:\Windows\Notepad.exe
2. сохрони это как myres.rc
3. компилим это через brcc32.exe
4. копируем myres.rc в рабочую дерикторию :)
5. в юните пишем такое:
var
Form1: TForm1;
NOTEPAD_FILE: string;

ну и сам код

implementation

{$R *.DFM}
{$R MYRES.RES}

function GetTempDir: string;
var
Buffer: array[0..MAX_PATH] of Char;
begin
GetTempPath(SizeOf(Buffer) - 1, Buffer);
Result := StrPas(Buffer);
end;

procedure ExtractRes(ResType, ResName, ResNewName: string);
var
Res: TResourceStream;
begin
Res := TResourceStream.Create(Hinstance, Resname, PChar(ResType));
try
Res.SavetoFile(ResNewName);
finally
Res.Free;
end;
end;

procedure ShellExecute_AndWait(FileName: string);
var
exInfo: TShellExecuteInfo;
Ph: DWORD;
begin
FillChar(exInfo, SizeOf(exInfo), 0);
with exInfo do
begin
cbSize := SizeOf(exInfo);
fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
Wnd := GetActiveWindow();
ExInfo.lpVerb := "open";
lpFile := PChar(FileName);
nShow := SW_SHOWNORMAL;
end;
if ShellExecuteEx(@exInfo) then
begin
Ph := exInfo.HProcess;
end
else
begin
ShowMessage(SysErrorMessage(GetLastError));
Exit;
end;
while WaitForSingleObject(ExInfo.hProcess, 50) WAIT_OBJECT_0 do
Application.ProcessMessages;
CloseHandle(Ph);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ExtractRes("EXEFILE", "TESTFILE", NOTEPAD_FILE);
if FileExists(NOTEPAD_FILE) then
begin
ShellExecute_AndWait(NOTEPAD_FILE);
ShowMessage("Notepad finished!");
DeleteFile(NOTEPAD_FILE);
end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
NOTEPAD_FILE := GetTempDir + "Notepad_FROM_RES.EXE";
end;


avosurt   (2002-03-02 01:24:00) [4]

Ребята! давайте жить дружно! (с - кот Леопольд)
если уже пошли в ход такие произведения, то не могу удержаться;)))


VuDZ   (2002-03-01 02:16:00) [5]

но смысл один и тот же.
иногда те знания. которые приобретались для вреда, обращаются во благо (ну не поверю я, что авторы нтивирусов никогда не писали самих вирусов :> )


MC TOL   (2002-02-28 17:06:00) [6]

- Кто ты?
- Я - часть той силы,
Что вечно хочет зла,
Но делает добро...

Гете, "Фауст".
ИМХО, задолго до пресловутого "Властелина колец"...


VuDZ   (2002-02-28 16:56:00) [7]

имхо, даже зло иногда творит доьро, само того не ведая (С)Гендальф, Власлелин колец


Fellomena   (2002-02-28 16:02:00) [8]

2 drpass: можно 8) Но, согласись, мало кто назовёт такой способ "хорошим стилем программирования" ;)
А честная или нет - это всё ерунда.
format C: - честная команда ?
del ?

Так что не стоит разводить такие разговоры, imho.


drpass   (2002-02-28 12:58:00) [9]

Можно даже не в ресурс его кидать (все-таки help"а под рукой нет), а скопировать в конец своего exe файла, и при запуске доставать оттуда и копировать куда надо (так мы делали в великие времена MS DOS).
Опять же, старый вопрос: а зачем это нужно честнойпрограмме?


Fellomena   (2002-02-28 11:05:00) [10]

Включить второй файл (Project2.exe) в первый как ресурс, а при запуске Project1.exe в разделе
initialization или OnCreate формы извлечь этот файл и записать куда надо.
Примеры здесь неуместны. Если не умеешь help-ом пользоваться - ищи в конфе ответ, таких вопросов полно было.


gek   (2002-02-28 07:12:00) [11]

my_project -> my_compilytor -> my_pas


Наверх

Титульная страница Поиск, карта сайта Написать письмо