Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.035 c
3-79632
MaxBgmz
2004-01-29 23:47
2004.02.25
альтернатива Парадоксу


14-80112
N169
2004-02-02 16:32
2004.02.25
Программист назвал сына версией 2.0 :)


1-79954
Tigran
2004-02-13 19:51
2004.02.25
Откуда можно скачать Delphi 6,7 или 8


8-80038
Веталь
2003-10-06 13:35
2004.02.25
Как устроить быструю отрисовку прозрачных спрайтов?


6-80077
Филипп
2003-12-16 13:45
2004.02.25
Использование IdUDPServer и IdUDPClient





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский