2009-09-30 21 views
6

He estado luchando con esto por un tiempo. Tengo una aplicación que usa muchos archivos y realmente me beneficiaría de ser LargeAddressAware.Cómo configurar LARGEADRESSAWARE para una aplicación ClickOnce?

Problema en resumen: con el indicador LAA, la aplicación no se iniciará.

resultados empíricos:

1) Tengo un script de liberación que recorre toda la publicación ClickOnce, a continuación, vuelve a firmar los ejecutables y archivos DLL, a continuación, vuelve a crear el manifiesto, lo firma etc

2) Ejecutar el script me da una aplicación que instala y funciona muy bien

3) la adición de este a la posterior a la generación rompe la aplicación:

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

(sí, lo sé, que tienen una configuración de construcción que se llama Publicar - idiota - pero funciona ...)

El mensaje de error que consigo es:

La activación de \ betabox \ appbeta \ app .application resultó en una excepción. Se detectaron mensajes de error siguiente:

+ Strong nombre de la firma no es válida para este app.exe montaje.

Tanto mi manifiesto como el exe están firmados por un certificado de firma de código válido. Y la secuencia de comandos funciona bien cuando la bandera no se establece.

Lo he intentado sin mi script también, con solo el comando editbin en el postcompilación y publicación a través de VS - el mismo error.

Entonces, ¿es totalmente imposible publicar una aplicación con LARGEADRESSAWARE configurada a través de ClickOnce?

Gracias!

Respuesta

5

Resuelto!

obtuvo ayuda de Kira en los foros de ClickOnce: http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/b008087c-45f8-4de6-b8f5-f34fddb29c8c/?prof=required

Solución: El EXE tiene que ser re-firmado con un nuevo nombre fuerte después de la bandera LAA se ha establecido.

Cómo hacer esto: En el post-construcción, el indicador se establece por:

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

Y después de eso, también en el posterior a la generación, el exe tiene que ser re-firmado :

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

Esto es, por supuesto, suponiendo que el PublicPrivateKeyFile.snk es una clave de firma de código y en la trayectoria del proyecto de Visual Studio.

Mi problema era que yo estaba re-firmar todos los archivos DLL/EXE después de la construcción usando:

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" 

Pero esto no actualiza el nombre seguro, solo firma el exe tal como es.

Espero que esto ayude a alguien!

+0

¡Gracias! Esto me ayudó mucho a tratar de descubrir por qué mi cambio 'editbin' no se aplicaba al hacer una implementación ClickOnce. No me di cuenta de que ClickOnce publica usando los archivos en la carpeta ** obj **, y NO usa la carpeta de salida ** bin **. – Nick

Cuestiones relacionadas