有没有办法获得与在运行时为 PEFlags 设置编译器标志相同的结果?
Posted
技术标签:
【中文标题】有没有办法获得与在运行时为 PEFlags 设置编译器标志相同的结果?【英文标题】:is there a way to obtain the same result than set compiler flags at runtime for PEFlags? 【发布时间】:2018-10-03 07:27:14 【问题描述】:几年前,我在某些特定 LAN 上的共享文件夹中运行大型 (100+MB) exe 时偶然发现了 C0000006 external exception
。所以我开始使用this question 中描述的编译器标志。
在数百个网络中的数百个客户上成功“执行 exe”多年后,我开始遇到 PE 标志问题(不知何故,exe 在同一台电脑上启动时崩溃,并且一次排除一个原因,我凭经验发现评论这些标志是有效的)。
不知何故,我发现的解决方法是构建我的 exe 两次(并让客户选择部署哪个),第一次使用这些:
$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP
$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
第二个评论这些。
这种建筑开销很烦人,我想避免它。我不认为有办法,但我请教专家建议:有没有办法“在运行时激活这些标志?”例如传递命令行参数?
我想到的另一种解决方法是在 exe 启动时将 exe 复制到本地,以便始终从本地计算机执行它,但我担心我需要面对的场景,即使从技术上来说它很简单。
谢谢。
【问题讨论】:
【参考方案1】:有没有办法在运行时激活这些标志,例如通过传递命令行参数?
不,没有。这些 PE 标志由系统加载程序处理,并且在执行可执行文件中的任何代码之前确定结果。
我想到的另一种解决方法是在 exe 启动时将 exe 复制到本地,以便始终从本地计算机执行。
这正是这些 PE 标志所具有的效果。如果可执行文件驻留在网络卷或可移动卷上,则首先将其复制到交换文件(本地文件),然后执行。
【讨论】:
谢谢。您如何看待我的解决方法?我喜欢在本地复制 exe 的想法,但我担心在某些超级安全的 LAN 上这个过程会被自动阻止。 我认为您没有正确诊断出故障,或者至少没有清楚地描述它。您说通过两次构建可执行文件来解决问题。那么,两次建造它如何改变结果呢?这没什么意义。或者你提供两个版本?不管怎样,我回答了你提出的问题。 是的,你是对的,我的意思是构建它两次,让有问题的客户下载第二个。这是可以接受的,因为到目前为止,只有不到 2% 的客户有这个问题,所以我可以处理。我修改了我的问题以更好地说明这一点。 从网络卷运行可执行文件充其量是不稳定的。告诉你的客户不要这样做,你的问题就会消失。我就是这么做的。 这取决于你如何解决这个问题,毕竟这是你的问题。无论如何,我回答了我认为你回答的两个直接问题。以上是关于有没有办法获得与在运行时为 PEFlags 设置编译器标志相同的结果?的主要内容,如果未能解决你的问题,请参考以下文章
Tkinter 程序在 IDE (Visual Studio) 中运行良好,但是当使用 pyinstaller 编译为 .exe 时,线程的工作方式与在 IDE 中不同
有没有办法使用带有编解码器 AAC 到 AAC 的 ffmpeg 获得准确的 1 秒剪辑
如何让我的Lambda函数与在本地计算机上运行的服务器通信?
AWS Sagemaker boto3 - 通过端点预测与在本地运行模型获得不同的预测