几年前,当我从某些特定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,但是我担心即使在技术上很简单,我也要面对的场景。
谢谢。
答案 0 :(得分:7)
是否有一种在运行时激活这些标志的方法,例如通过传递命令行参数?
不,没有。这些PE标志由系统加载程序处理,并在执行可执行文件中的任何代码之前确定结果。
我想到的另一种解决方法是在exe启动时在本地复制exe,以便始终在本地计算机上执行它。
这正是这些PE标志所具有的效果。如果可执行文件位于网络卷或可移动卷上,则首先将其复制到交换文件(本地文件)中,然后执行。