Delphi 如果我使用shellExecute从另一个运行我的应用程序,则TResourceStream不工作

Delphi 如果我使用shellExecute从另一个运行我的应用程序,则TResourceStream不工作,delphi,resources,delphi-xe7,Delphi,Resources,Delphi Xe7,我有两个应用程序,每个人都执行不同的任务,第一个应用程序使用shellExecute运行第二个应用程序 第二个应用程序提取其中已经存在的资源 问题是:当我从第一个应用程序运行第二个应用程序时,虽然应用程序窗体显示给我,但资源没有提取,但是如果我直接运行第二个应用程序,请双击提取的资源 我还尝试了CreateProcess和WinExec,但资源也没有提取 编辑: 项目1只有一个按钮打开项目2 procedure TForm1.Button1Click(Sender: TObject); begi

我有两个应用程序,每个人都执行不同的任务,第一个应用程序使用shellExecute运行第二个应用程序

第二个应用程序提取其中已经存在的资源

问题是:当我从第一个应用程序运行第二个应用程序时,虽然应用程序窗体显示给我,但资源没有提取,但是如果我直接运行第二个应用程序,请双击提取的资源

我还尝试了CreateProcess和WinExec,但资源也没有提取

编辑: 项目1只有一个按钮打开项目2

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;