[英]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.