Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: CL | DM;

Вниз

Как запустить екзешник из ресурса ?   Найти похожие ветки 

 
Winni ©   (2003-12-17 20:04) [0]

Здравствуйте, уважаемые мастера!
В поиске я уже порылся,но ничего не нашел. Известно, что exe-файл (т е добавочный, встроенный exe-файл) можно прикомпановать к приложению, используя ресурс. Затем его из ресурса, используя поток, можно записать в файл, а затем этот файл запустить, используя CreateProcess. Все здесь хорошо, но не хочется записывать в файл на диске. Нельзя ли как-нибудь решить эту задачу ( запустить сохраненный в ресурсе exe-файл ?


 
Xtz ©   (2003-12-18 00:26) [1]

Попробуй это.........


{$R MYRES.RES}

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

// Extract the Resource
function ExtractRes(ResType, ResName, ResNewName: string): Boolean;
var
Res: TResourceStream;
begin
Result := False;
Res := TResourceStream.Create(Hinstance, Resname, PChar(ResType));
try
Res.SavetoFile(ResNewName);
Result := True;
finally
Res.Free;
end;
end;

// Execute the file
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
if ExtractRes("EXEFILE", "TESTFILE", NOTEPAD_FILE) then
if FileExists(NOTEPAD_FILE) then
begin
ShellExecute_AndWait(NOTEPAD_FILE);
ShowMessage("Notepad finished!");
DeleteFile(NOTEPAD_FILE);
end;
end;


 
Игорь Шевченко ©   (2003-12-18 00:45) [2]


> Все здесь хорошо, но не хочется записывать в файл на диске.
> Нельзя ли как-нибудь решить эту задачу ( запустить сохраненный
> в ресурсе exe-файл ?


Нельзя.


 
Ihor Osov'yak ©   (2003-12-18 01:22) [3]

может подойдет такой "извратный" вариант:
создаем виртуальный том, как носитель для него - ресурс :-)

но имхо, шкура выделки не стоит..


 
Winni ©   (2003-12-18 10:08) [4]

Добрый день !
Спасибо за советы. Действительно, если можно надежно удалить временный файл, то это подойдет. Буду пробовать код от Xtz.
Всего хорошего.



Страницы: 1 вся ветка

Текущий архив: 2004.02.25;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.025 c
3-79648
Soi
2004-01-31 17:33
2004.02.25
Чтение файла из Blob-поля


1-79913
Гость-342
2004-01-28 14:51
2004.02.25
Рисуем в Memo. Затруднительный вопрос.


14-80264
J_S
2004-02-03 11:52
2004.02.25
MS XML v.2.0 & DTD


3-79615
Slavik_V
2004-02-02 03:14
2004.02.25
Два итоговых поля в QuickReport


6-80054
samalex
2003-12-18 14:19
2004.02.25
Про Socket