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

LaB*_*cca 5 delphi compiler-flags delphi-10-seattle

几年前,我C0000006 external exception在一些特定局域网上从共享文件夹运行一个大型(100 + MB)exe时偶然发现了.所以我开始使用这个问题中描述的编译器标志.

在数百个网络中的数百个客户多年成功"执行exe"后,我开始遇到PE标志的问题(不知何故,exe在同一台PC上启动时崩溃,一次排除一个原因,我根据经验发现评论这些标志工作).

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

{$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP}
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP} 
Run Code Online (Sandbox Code Playgroud)

第二个评论那些.

这个建筑开销很烦人,我想避免它.我不认为有办法,但我要求专家建议:有没有办法"在运行时激活那些标志?" 例如,传递命令行参数?

我想到的另一个解决方法是在exe开始时本地复制exe,这样它总是从本地机器执行,但我担心我需要面对的场景,即使从技术上讲它很简单.

谢谢.

Dav*_*nan 7

有没有办法在运行时激活这些标志,例如通过传递命令行参数?

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

我想到的另一个解决方法是在exe启动时本地复制exe,这样它总是从本地机器执行.

这正是这些PE旗帜所具有的效果.如果可执行文件驻留在网络卷或可移动卷上,则首先将其复制到交换文件(本地文件),然后执行.

  • 我认为你没有正确诊断出这个错误,或者至少清楚地描述了它.您说通过构建可执行文件两次解决了问题.那么,如何建立它两次会改变结果呢?这没什么意义.或者你提供两个版本?无论如何,我回答了你提出的问题. (2认同)