Delphi 如果我使用shellExecute从另一个运行我的应用程序,则TResourceStream不工作
我有两个应用程序,每个人都执行不同的任务,第一个应用程序使用shellExecute运行第二个应用程序 第二个应用程序提取其中已经存在的资源 问题是:当我从第一个应用程序运行第二个应用程序时,虽然应用程序窗体显示给我,但资源没有提取,但是如果我直接运行第二个应用程序,请双击提取的资源 我还尝试了CreateProcess和WinExec,但资源也没有提取 编辑: 项目1只有一个按钮打开项目2Delphi 如果我使用shellExecute从另一个运行我的应用程序,则TResourceStream不工作,delphi,resources,delphi-xe7,Delphi,Resources,Delphi Xe7,我有两个应用程序,每个人都执行不同的任务,第一个应用程序使用shellExecute运行第二个应用程序 第二个应用程序提取其中已经存在的资源 问题是:当我从第一个应用程序运行第二个应用程序时,虽然应用程序窗体显示给我,但资源没有提取,但是如果我直接运行第二个应用程序,请双击提取的资源 我还尝试了CreateProcess和WinExec,但资源也没有提取 编辑: 项目1只有一个按钮打开项目2 procedure TForm1.Button1Click(Sender: TObject); begi
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Handle, nil, PChar('D:\Project2.exe'), nil, nil, SW_SHOWNORMAL);
end;
这是project2代码,在创建部分必须提取资源
procedure TForm1.FormCreate(Sender: TObject);
var
DllRS: TResourceStream;
begin
DllRS:= TResourceStream.Create(HInstance, 'dllFile', 'dll');
try
DllRS.SaveToFile(GetCurrentDir + '\dllFile.dll');
finally
DllRS.Free;
end;
end;
我能想到的唯一合理解释是,第一个应用程序加载了第二个应用程序试图写入的DLL。加载可执行文件.exe、.dll、.ocx等时,该文件被锁定,无法写入。问题已解决, 我使用GetCurrentDir获取project2目录,如果我使用ShellExecute从preject1打开project2,GetCurrentDir函数获取project1目录而不是project2 我使用ExtractFilePathApplication.ExeName代替GetCurrentDir,工作正常
所以,问题不在TResourceStream中,而是在GetCurrentDir中 虽然您没有显示实际的代码,但我认为这是常见的工作目录问题。您的程序存在缺陷。只有有代码的人才能修复它。@FreeConsulting调用进程的工作目录对TResourceStream没有任何影响。TResourceStream失败的唯一方法是,如果向其构造函数传递了错误的HInstance(假定传递了正确的资源ID/名称)。@FreeConsulting OP没有说明所使用的文件系统。@FreeConsulting可以提取到内存,而不是文件。可以这样说,我在project1中使用shellExecute打开project2
procedure TForm1.FormCreate(Sender: TObject);
var
DllRS: TResourceStream;
begin
DllRS:= TResourceStream.Create(HInstance, 'dllFile', 'dll');
try
DllRS.SaveToFile(GetCurrentDir + '\dllFile.dll');
finally
DllRS.Free;
end;
end;