Главная страница
    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.45 MB
Время: 0.033 c
1-79753
Слэш
2004-02-12 08:33
2004.02.25
Форма StayOnTop не скрывается


1-79951
Matrex
2004-02-13 19:49
2004.02.25
Focus


1-79814
Aks
2004-02-11 12:21
2004.02.25
как узнать разрешение экрана


1-79934
SMT
2004-02-09 16:37
2004.02.25
TeeChart компонент


1-79963
nucl
2004-02-13 17:28
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский