如何把一个EXE文件存入数据,并把它取出来执行它?(200分)

  • 主题发起人 主题发起人 lzk09
  • 开始时间 开始时间
L

lzk09

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个问题请教务位:如何把一个EXE文件存入数据,并把它取出来执行它?
 
存入数据?你是指存放什么地方,应该有要求吧?
使用内存流来读取存放可以达到.
 
加入资源文件(*.rc),格式:
ARJ EXEFILE C:/arj.exe
然后用brcc32.exe 编译成sample.res
在程序中加入{$R sample.res}
程序调用如下:
var res:TResourceStream;
begin
res:=TResourceStream.Create(hInstance,
'ARJ',pchar('EXEFILE'));
res.saveToFile('C:/a.exe');
res.free;
//调用:
winexec('C:/a.exe',sw_show);
 
我是指存入数据库
 
1.>建立一个能够保存2进制的字段,例如在Ms sql 中Image字段Image1
....
if not (Query.State in [dsInsert, dsEdit]) then
Query1.Insert;
Query1Images1.LoadFromFile('c:/Windows/project1.exe');
Query1.Post;
....实现保存exe文件到数据库
2.>
....
Query1Images1.SaveToFile('c:/Windows/project1.exe');
Winexec('c:/Windows/project1.exe',sw_Normal)
....
实现"把它取出来执行它"

 
同意楼上,就如保存BLOB字段一样处理,不过最好存成二进制格式
 
谢谢Jhdandcl,给了我一个提示。
 
正如大大翁所说,存路径也是一种好方法
 
你可以把exe文件的绝对路径存放到数据库对应字段中,要执行exe文件时,先读出文件的路径名,然后调用winapi函数:shellexecute()就可以了,关于shellexecute函数,dephi中提供了帮助。
 
高深点的:
能否放在内存中运行,而不是释放到盘上再WINEXEC
解决这个问题我给200分
 
在内存中运行文件的方法恐怕不太可能,我看过一些从前的贴子,很早前就有人问了,都没有一个很好的方法,恐怕只能存临时目录中再运行了
 
流的应用
 
如果是MSSQL的数据库,保存文件流的字段应选择IMAGE,客户端要写入的话,利用内存流的方式,读出也是用内存流的方式。读出时就在TEMP目录生成一个文件(名字可以随机),然后再用WINEXEC执行。不就行了。思路是这样的。你去试一下。
 
后退
顶部