有没有办法在运行时为PEFlags获得与设置编译器标志相同的结果?

时间:2018-10-03 07:27:15

标签: delphi delphi-10-seattle compiler-flags

几年前,当我从某些特定LAN上的共享文件夹中运行大型(100 + MB)exe文件时,我偶然发现了C0000006 external exception。因此,我开始使用this question中所述的编译器标志。

在数以百计的网络中成功地对数百个客户执行了exe之后,我开始遇到PE标志的问题(以某种方式,exe在同一台PC上启动时崩溃,并且一次排除了一个原因,我凭经验发现,评论这些标志正在起作用)。

某种程度上,我找到的解决方法是将我的exe编译两次(然后让客户选择要部署的exe),第一个是使用以下代码:

{$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP}
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP} 

,第二个评论。

这个建筑开销很烦人,我想避免它。我认为没有办法,但是我需要专家的建议:是否有办法“在运行时激活这些标志?”例如传递命令行参数?

我想到的另一种解决方法是在exe启动时在本地复制exe,以便始终从本地计算机执行该exe,但是我担心即使在技术上很简单,我也要面对的场景。

谢谢。

1 个答案:

答案 0 :(得分:7)

  

是否有一种在运行时激活这些标志的方法,例如通过传递命令行参数?

不,没有。这些PE标志由系统加载程序处理,并在执行可执行文件中的任何代码之前确定结果。

  

我想到的另一种解决方法是在exe启动时在本地复制exe,以便始终在本地计算机上执行它。

这正是这些PE标志所具有的效果。如果可执行文件位于网络卷或可移动卷上,则首先将其复制到交换文件(本地文件)中,然后执行。