[英]LARGEADDRESSAWARE turned off after installation?
我已经使用'editbin / LARGEADDRESSAWARE'命令更改了.NET C#exe,以便它可以处理大于2 GB的内存。 这可以正常工作,我可以运行“ dumpbin”命令来验证它是否已成功修改。 然后,我继续创建一个包含此exe的.msi程序包。 当我在Windows 7目标计算机上运行此.msi时,它将成功安装exe。 但是现在,如果我在目标计算机上安装的同一exe上运行“ dumpbin”,则表明它不再支持大于2 GB的内存。 是什么原因造成的? 是在目标计算机上构建.msi的过程还是运行.msi?
先谢谢您的帮助。
无论这里出了什么问题,肯定与您手动执行操作有关。 让构建系统为您执行此操作。 项目+属性,生成事件选项卡。 将其粘贴到“构建后事件命令行”框中:
set pathsave=%path%
set path=$(devenvdir);$(devenvdir)..\..\vc\bin
editbin.exe /nologo /largeaddressaware "$(targetfilename)"
set path=%pathsave%
editbin在msbuild后生成步骤中设置LARGEADDRESSAWARE标志存在多个问题。
最后,您的任务将如下所示:
<Target Name="AfterBuild" BeforeTargets="CopyFilesToOutputDirectory" Inputs="$(IntermediateOutputPath)$(TargetFileName)" Outputs="$(IntermediateOutputPath)largaddessaware.tmp">
<Exec Command="xxxxxbin\amd64\EditBin.exe /LARGEADDRESSAWARE "$(IntermediateOutputPath)$(TargetFileName)""/>
<Exec Command="sn -Ra "$(IntermediateOutputPath)$(TargetFileName)" "$(AssemblyOriginatorKeyFile)""/>
<Touch AlwaysCreate="true" Files="$(IntermediateOutputPath)largaddessaware.tmp"/>
</Target>
我们需要在CopyFiletoOutputDirectory运行之前修补可执行文件,否则我们将在未修补的文件已经复制到ouptut文件夹之后修补中间文件。 无法修补最终文件,因为在未更改exe时此目标将不会运行,以防止破坏增量版本。
这是一个简单任务(在PE标头中设置一位)的经典示例,很难完成。 (几乎)从来没有像开始时那样容易。
我认为最终我发现安装程序从与我使用editbin post build命令进行更新的路径不同的路径中选择了我的exe。 我在我的exe副本“ $(targetpath)”,“ $(ProjectDir)\\ obj \\ x86 \\ release”的发布后命令中添加了这一行
所以整个构建后的命令看起来像这样
set pathsave=%path%
set path=$(devenvdir);$(devenvdir)..\..\vc\bin
editbin.exe /nologo /largeaddressaware "$(targetpath)"
copy "$(targetpath)" "$(ProjectDir)\obj\x86\release"
set path=%pathsave%
谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.