如何为ClickOnce应用程序设置LARGEADRESSAWARE?

时间:2009-09-30 07:38:15

标签: deployment clickonce

我一直在努力解决这个问题。我有一个使用大量内存的应用程序,真的会受益于 LargeAddressAware

问题简而言之:使用LAA-flag,应用程序将无法启动。

实证结果:

1)我有一个发布脚本,运行整个ClickOnce发布,然后重新签名可执行文件和dll,然后重新创建清单,签名等等

2)运行脚本为我提供了一个可以安装并且运行良好的应用程序

3)将其添加到后期制作会破坏应用程序:

editbin /LARGEADDRESSAWARE <path>/obj/Publish/app.exe

(是的,我知道,我们有一个名为 Publish 的构建配置 - 白痴 - 但是有效......)

我得到的错误信息是:

激活\ betabox \ appbeta \ app.application导致异常。 检测到以下失败消息:

+强名称签名对此程序集app.exe无效。

我的manifest和exe都是由有效的代码签名证书签名的。当标志没有设置时,脚本工作正常。

我已经尝试过没有我的脚本,只有在构建后的 editbin 命令并通过VS发布 - 同样的错误。

那么 - 通过ClickOnce发布LARGEADRESSAWARE设置的应用是否完全不可能?

谢谢!

1 个答案:

答案 0 :(得分:5)

解决!

在ClickOnce论坛中获得Kira的帮助:http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/b008087c-45f8-4de6-b8f5-f34fddb29c8c/?prof=required

<强>解决方案: 在设置LAA标志后,必须使用新的强名称重新签名EXE。

如何执行此操作 在后期构建中,标志由:

设置
cd $(ProjectDir)
editbin /LARGEADDRESSAWARE obj/$(ConfigurationName)/app.exe

之后,同样在后期构建中,exe必须重新签名:

sn -Ra obj\$(ConfigurationName)\app.exe PublicPrivateKeyFile.snk

这当然是假设PublicPrivateKeyFile.snk是代码签名密钥并且在Visual Studio项目的路径中。

我的问题是我在构建之后使用:

重新签名所有dll / exes
for /R %BIN_DIR% %%f in (*.dll) do signtool sign /a /i "Thawte" /t http://timestamp.verisign.com/scripts/timstamp.dll "%%f"
for /R %BIN_DIR% %%f in (*.exe) do signtool sign /a /i "Thawte" /t http://timestamp.verisign.com/scripts/timstamp.dll "%%f"

但这并没有更新强名称,只是按照原样签署。

希望这有助于某人!