Главная страница
    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.029 c
1-79803
Алексей
2004-02-11 13:59
2004.02.25
Автоматизация Word


3-79543
valerchik
2004-02-02 23:53
2004.02.25
ADOQuery и строка


3-79593
bSava
2004-02-02 16:11
2004.02.25
InterBase (Yaffil) и Win 95


14-80201
:)
2004-01-30 18:18
2004.02.25
загрузка картинки!


14-80183
Начинающий веб-дизайнер
2004-01-30 11:06
2004.02.25
Вопрос в службу поддержки программы.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский