Delphi如何把资源文件释放到指定位置并运行?
有A.exe和B.exe两个文件,如何制作成资源文件加入到Delphi主程序C.exe中,C.exe中有个确定按钮,通过点击确定按钮,把A和B两个文件释放到C:\User...
有A.exe和B.exe两个文件,如何制作成资源文件加入到Delphi主程序C.exe中,C.exe中有个确定按钮,通过点击确定按钮,把A和B两个文件释放到C:\Users\cdko\Local Settings\Temp下并运行,
(路径要能自动识别,也就是说,要不管是XP还是WIN7系统,不管引导盘在C或D还是别的盘,不管用户是张三还是李四,都能正确判断出并且把文件释放到该目录并运行.类似安装程序那样,总是能把临时文件放到临时目录下运行.)
求高手给出详细实现代码,在线急等,谢谢!
求解 展开
(路径要能自动识别,也就是说,要不管是XP还是WIN7系统,不管引导盘在C或D还是别的盘,不管用户是张三还是李四,都能正确判断出并且把文件释放到该目录并运行.类似安装程序那样,总是能把临时文件放到临时目录下运行.)
求高手给出详细实现代码,在线急等,谢谢!
求解 展开
2个回答
展开全部
1:资源文件制作:
创建一文本文件,重命名:XXX.RC。
用记事本打开该文件,写2行:
File0 Temp A.exe
File1 Temp B.exe
保存文件,A.exe 和 B.exe 和XXX.RC 在同一文件夹。
2:加入资源,在C.exe的工程里,加入RC(资源)文件:
菜单 -> project -> add to project -> 文件类型选择*.RC -> 选择刚才做好的XXX.RC。
编译C.exe这个工程。
3:释放
Unit Unit1;
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
Type
TForm1 = Class(TForm)
Procedure FormCreate(Sender: TObject);
Private
{ Private declarations }
Public
{ Public declarations }
End;
Var
Form1: TForm1;
Implementation
Uses ShellAPI;
{$R *.dfm}
Function File_Get_Res(Const aFile, ResName, ResType: String): Boolean;
Begin
Result := False;
Try
With TResourceStream.Create(HInstance, ResName, PChar(ResType)) Do
Begin
Try
If FileExists(aFile) Then
Begin
DeleteFile(aFile);
End;
If Not FileExists(aFile) Then
Begin
SaveToFile(aFile);
Result := FileExists(aFile);
End;
Finally
Free;
End;
End;
Except
Result := False;
End;
End;
Function Path_Temp: String; // 临时目录
Var
aDir: Array[0..MAX_PATH - 1] Of Char;
Begin
GetTempPath(max_path, aDir);
Result := Trim(IncludeTrailingPathDelimiter(aDir));
End;
Procedure TForm1.FormCreate(Sender: TObject);
Var
aFile, bFile: String;
Begin
//File0 Temp A.exe
aFile := Format('%s%s', [Path_Temp, 'AAA.exe']); //释放到哪里? 文件名可自定义
If File_Get_Res(aFile, 'File0', 'temp') Then
Begin
ShellExecute(Handle, 'Open', Pchar(aFile), Nil, Nil, SW_NORMAL);
End;
//File1 Temp B.exe
bFile := Format('%s%s', [Path_Temp, 'BBB.exe']);
If File_Get_Res(bFile, 'File1', 'temp') Then
Begin
ShellExecute(Handle, 'Open', Pchar(bFile), Nil, Nil, SW_NORMAL);
End;
End;
End.
创建一文本文件,重命名:XXX.RC。
用记事本打开该文件,写2行:
File0 Temp A.exe
File1 Temp B.exe
保存文件,A.exe 和 B.exe 和XXX.RC 在同一文件夹。
2:加入资源,在C.exe的工程里,加入RC(资源)文件:
菜单 -> project -> add to project -> 文件类型选择*.RC -> 选择刚才做好的XXX.RC。
编译C.exe这个工程。
3:释放
Unit Unit1;
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
Type
TForm1 = Class(TForm)
Procedure FormCreate(Sender: TObject);
Private
{ Private declarations }
Public
{ Public declarations }
End;
Var
Form1: TForm1;
Implementation
Uses ShellAPI;
{$R *.dfm}
Function File_Get_Res(Const aFile, ResName, ResType: String): Boolean;
Begin
Result := False;
Try
With TResourceStream.Create(HInstance, ResName, PChar(ResType)) Do
Begin
Try
If FileExists(aFile) Then
Begin
DeleteFile(aFile);
End;
If Not FileExists(aFile) Then
Begin
SaveToFile(aFile);
Result := FileExists(aFile);
End;
Finally
Free;
End;
End;
Except
Result := False;
End;
End;
Function Path_Temp: String; // 临时目录
Var
aDir: Array[0..MAX_PATH - 1] Of Char;
Begin
GetTempPath(max_path, aDir);
Result := Trim(IncludeTrailingPathDelimiter(aDir));
End;
Procedure TForm1.FormCreate(Sender: TObject);
Var
aFile, bFile: String;
Begin
//File0 Temp A.exe
aFile := Format('%s%s', [Path_Temp, 'AAA.exe']); //释放到哪里? 文件名可自定义
If File_Get_Res(aFile, 'File0', 'temp') Then
Begin
ShellExecute(Handle, 'Open', Pchar(aFile), Nil, Nil, SW_NORMAL);
End;
//File1 Temp B.exe
bFile := Format('%s%s', [Path_Temp, 'BBB.exe']);
If File_Get_Res(bFile, 'File1', 'temp') Then
Begin
ShellExecute(Handle, 'Open', Pchar(bFile), Nil, Nil, SW_NORMAL);
End;
End;
End.
更多追问追答
追问
谢谢您的热心解答,按照你的方法制作好了资源文件,也把你的代码我复制进去试运行,能正常运行,但是在临时目录没发现有释放文件呢,也没有程序运行.我的意思路是,释放A和B到临目录,然后运行A或B文件.能不能再解答下,谢谢!
追答
那你把文件释放到C:\下试试。
Function Path_Temp: String; // 临时目录
//Var
//aDir: Array[0..MAX_PATH - 1] Of Char;
Begin
//GetTempPath(max_path, aDir);
//Result := Trim(IncludeTrailingPathDelimiter(aDir));
Result := 'c:\';
End;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询