2009-09-30 11 views
6

Ho litigato con questo per un po 'di tempo. Ho un'app che utilizza un sacco di mem e in realtà trarrebbe vantaggio dall'essere LargeAddressAware.Come impostare LARGEADRESSAWARE per un'app ClickOnce?

problema in breve: Con il LAA-bandiera, l'applicazione non si avvierà.

risultati empirici:

1) Ho uno script di rilascio che gestisce l'intera pubblicazione ClickOnce, poi ri-segni gli eseguibili e le DLL, quindi ricrea i manifesti, segni si etc

2) l'esecuzione dello script mi ​​dà un app che installa e funziona bene

3) l'aggiunta di questo alla post-generazione rompe l'app:

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

(sì, lo so, abbiamo una configurazione di compilazione che si chiama Pubblica - idiota - ma funziona ...)

Il messaggio di errore che ottengo è:

attivazione di \ betabox \ appbeta \ app .application ha provocato un'eccezione. sono stati rilevati seguenti messaggi di guasto:

+ Forte firma nome non valido per questa assemblea app.exe.

Sia il mio il manifesto e l'exe è firmato da un codice firma cert valido. E lo script funziona bene quando la bandiera non viene impostata.

Ho provato anche senza il mio script, con solo il comando editbin nel post-build e la pubblicazione tramite VS - stesso errore.

Quindi - è del tutto impossibile pubblicare un app con LARGEADRESSAWARE impostato tramite ClickOnce?

Grazie!

risposta

5

Risolto!

Got aiuto da Kira nei forum ClickOnce: http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/b008087c-45f8-4de6-b8f5-f34fddb29c8c/?prof=required

Soluzione: L'EXE deve essere ri-firmato con un nuovo nome forte dopo la bandiera LAA è stata impostata.

Come fare questo: Nel post-build, il flag è impostato da:

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

E dopo che, anche nel post-generazione, l'exe deve essere ri-firmato :

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

Questo è naturalmente assumendo che la PublicPrivateKeyFile.snk è una chiave di firma codice e nel percorso del progetto di Visual Studio.

Il mio problema era che stavo ri-firmare tutte le DLL/exes dopo la compilazione con:

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" 

Ma questo non aggiorna il nome sicuro, solo firma l'exe così com'è.

Spero che questo aiuti qualcuno!

+0

Grazie! Ciò mi ha aiutato molto a cercare di capire perché la mia modifica "editbin" non è stata applicata durante l'implementazione di ClickOnce. Non mi sono reso conto che ClickOnce pubblica usando i file nella cartella ** obj ** e NON usa la cartella di output ** bin **. – Nick