簡體   English   中英

LARGEADDRESSAWARE在安裝后關閉了嗎?

[英]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標志存在多個問題。

  1. EditBin x32不在VS命令提示符之外運行,因為未找到mspdb100.dll。 你為什么要在乎呢? 好吧,如果您運行TFS構建工作流,則不會從VS命令提示符處調用msbuild。 這將導致問題...
  2. 您可以通過使用bin \\ amd64 \\ editbin.exe中的一個來解決此問題,但是您只能在x64構建計算機上構建exe。
  3. 如果在$(TargetPath)處修補最終文件,則它將起作用,但是如果您重建項目並且為任務設置了Inputs和Outputs,則它將不會再次運行。 這是一個問題,因為在重建過程中,來自中間文件夾的exe會再次復制到未打補丁的最終位置。
  4. 這還不是嗎。 因為如果您使用了強名,則您需要重新簽名exe,以使強名再次有效。 它會在您的dev機器上運行,因為大多數時候dev機器都禁用了強名驗證,但是它將無法在客戶機器上運行。

最后,您的任務將如下所示:

<Target Name="AfterBuild" BeforeTargets="CopyFilesToOutputDirectory" Inputs="$(IntermediateOutputPath)$(TargetFileName)" Outputs="$(IntermediateOutputPath)largaddessaware.tmp">
   <Exec Command="xxxxxbin\amd64\EditBin.exe /LARGEADDRESSAWARE &quot;$(IntermediateOutputPath)$(TargetFileName)&quot;"/>
   <Exec Command="sn -Ra &quot;$(IntermediateOutputPath)$(TargetFileName)&quot; &quot;$(AssemblyOriginatorKeyFile)&quot;"/>
   <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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM