2009-09-30 44 views
6

我一直在摔跤这一段时间了。我有一个应用程序,使用大量的内存,真的会受益于LargeAddressAware如何为ClickOnce应用程序设置LARGEADRESSAWARE?

问题简而言之:使用LAA标志,应用程序不会启动。

实证结果:

1)我有一个运行整个的ClickOnce发布一个版本的脚本,然后重新迹象可执行文件和DLL,然后重新创建清单,签字,等

2 )运行脚本给我,安装和工作很好

3)添加此为事后构建的应用打破了应用:

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

(是的,我知道,我们有一个叫做发布构建配置 - 愚蠢的 - 但工程...)

该错误消息我得到的是:

的\ betabox \ appbeta \应用程序激活。应用程序导致异常。检测 下列失败消息:

+强名称签名不适用于这个装配APP.EXE。

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

我试过没有我的脚本,只有editbin命令在后构建和通过VS发布 - 相同的错误。

所以 - 通过ClickOnce发布LARGEADRESSAWARE应用程序是完全不可能的吗?

谢谢!

回答

5

解决!

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

解决方案: 的EXE必须与新的强名称重新签订了LAA标志已经设置后。

如何做到这一点: 在生成后,该标志被设置:

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

而在此之后,同样在生成后的EXE必须重新签署:

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

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

我的问题是,我是/编译EXE文件后重新使用签名的所有DLL:

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" 

但这并不更新强大的名字,只是签署exe文件,因为它是。

希望这可以帮助别人!

+0

谢谢!这帮助我了解了为什么在执行ClickOnce部署时我的'editbin'更改没有得到应用。我没有意识到ClickOnce发布使用** obj **文件夹中的文件,并且不使用** bin **输出文件夹。 – Nick 2015-12-09 17:41:16

相关问题