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

is there a way to obtain the same result than set compiler flags at runtime for PEFlags?

年前,当 运行 某些特定 LAN 上共享文件夹中的大型 (100+MB) exe 时,我无意中发现了 C0000006 external exception。所以我开始使用 this question.

中描述的编译器标志

经过多年对数百个网络中数百个客户的成功 "execution of exe",我开始遇到 PE 标志问题(不知何故,exe 在同一台 pc 上启动时崩溃,我凭经验一次排除一个原因发现评论这些标志是有效的)。

我找到的解决方法是构建我的 exe 两次(并让客户选择部署哪个),第一次使用这些:

{$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP}
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP} 

第二个评论那些。

这座建筑物的开销很烦人,我想避免它。我认为没有办法,但我想请教专家:有没有办法 "activate those flags at runtime?" 例如传递命令行参数?

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

谢谢。

Is there a way to activate these flags at runtime, for example by passing a command line parameter?

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

Another workaround I thought of is to copy locally the exe as the exe starts, so that it is always executed from the local machine.

这正是这些 PE 标志的作用。如果可执行文件驻留在网络卷或可移动卷上,则首先将其复制到交换文件(本地文件),然后执行。