Domanda

Sto lavorando a un progetto distribuito con ClickOnce e sto riscontrando diversi problemi.

Ci sono due componenti nella mia soluzione software:un client desktop che necessita .NETTO framework 3.5 da eseguire e un server (ASP.NET applicazione) che elenca i documenti disponibili e fornisce un modo per installare il client desktop con ClickOnce.

Il mio primo problema è quello dei prerequisiti:Ho bisogno di un modo per installare il framework 3.5 prima dell'installazione del client.Visual Studio crea un file setup.exe che se ne occupa, ma per farlo funzionare deve essere eseguito direttamente (invece di collegarsi al .application file) e la distribuzione URL deve essere noto durante la creazione del manifest ClickOnce.

Quindi ho altri due problemi:apparentemente non c'è modo di eseguire l'applicazione client con argomenti della stringa di query dopo averla installata con setup.exe, quindi invece di avere un server che visualizza l'elenco dei documenti collegato a un URL come ".../client.application?document=doc1" posso solo avere un collegamento a setup.exe.

L'altro problema è il peggiore:il server è destinato ad essere utilizzato in reti private relativamente piccole e non su un singolo server web.Il problema è:Non conosco l'URL di distribuzione del client ClickOnce in fase di compilazione, quindi il file setup.exe non può funzionare correttamente quando è selezionata l'opzione "Installa da un sito Web".Per ora, la soluzione alternativa è avere un programma di installazione offline che contenga il file setup.exe, prerequisiti e file di distribuzione ClickOnce in un grande file ZIP.

Un utente con la versione del framework corretta può comunque utilizzare il file .application collegamento con querystring al documento per installare/aggiornare il client e aprire il documento.Un utente senza il framework riceve un messaggio di errore ("L'aggiornamento del sistema richiede blablabla 3.5.0.0 blabla GAC"), e deve scaricare il file ZIP, estrarlo sul suo computer locale ed eseguire il programma setup.exe file per installare il framework e quindi il client.Successivamente, deve tornare all'elenco dei documenti e utilizzare il collegamento per avviare il client con gli argomenti appropriati.

Inutile dire che non sono molto orgoglioso di questa strategia, che rovina tutti i vantaggi della distribuzione di ClickOnce.

È possibile eliminare il problema dei prerequisiti in un modo più elegante?Esiste un modo semplice per modificare l'URL di installazione dell'applicazione ClickOnce quando si distribuisce il server in una rete (come scrivere l'URL in un file di configurazione o qualcosa del genere)?

È stato utile?

Soluzione

Anch'io ho cercato di risolvere il " Non conosco l'URL di distribuzione del client clickonce al momento della compilazione " problema.

Il meglio che posso trovare (ho appena iniziato a scriverlo, quindi questa è ancora una speculazione) è scrivere un'utilità che verrà eseguita dall'utente finale che imposterà il deploymentURL. Ciò sembra essere possibile in .NET ma è necessario:

  • Leggi nel manifest con ManifestReader.ReadManifest
  • imposta DeploymentUrl
  • ManifestWriter.WriteManifest

Quindi devi firmare nuovamente il manifest usando SecurityUtilities.SignFile

Il processo di firma mi dà fastidio. O devo usare un certificato usa e getta (che rende insignificante la firma) o devo usare un certificato da una CA e quindi devo distribuire la mia password per dimettermi dal manifest (che è stupido poiché rende insicuro il mio certificato) . Quindi mi sembra di rimanere con l'utente che vede " Unknown Publisher " e un punto esclamativo giallo ...

Altri suggerimenti

Al fine di creare applicazioni ClickOnce nel nostro sistema di generazione continua e distribuirle su diversi server di test, ho trascorso del tempo con Mage e l'articolo Scenario: distribuzione manuale di un'applicazione ClickOnce .

Non sono sicuro se questo risolverà il tuo secondo problema, ma potrebbe almeno essere un po 'complicato dal processo di compilazione se esegui la distribuzione su più server. Se riesci a distribuire mage.exe (non sono sicuro se Microsoft lo consente), puoi modificare i tuoi manifest in loco durante l'installazione.

Forse una soluzione sarebbe:

Utilizza PublishUrl=http://fare clic una volta/is/kinda/cool e sul computer client modificare il file host Windows situato su
%windir%\system32\drivers\etc\hostse puntare l'host con un clic una volta su indirizzo IP fisso del server.

Forse ClickOnce dovrebbe avere un'opzione per rilevare il server da cui è stata scaricata l'applicazione;Se qualcuno lo sa, per favore posta qui;

Se gli utenti si trovano su un dominio, farei in modo che l'amministratore di sistema spenga .NET 3.5 usando Criteri di gruppo / Windows Update o qualsiasi altra strategia venga utilizzata per gestire i desktop.

Sembra un problema ambientale. Se l'organizzazione è abbastanza grande da avere un amministratore di sistema, dovrebbe essere responsabilità di quella persona fornire un ambiente per l'esecuzione dell'applicazione.

Se l'organizzazione non ha una persona in questo ruolo, credo che tu sia tornato alla tua soluzione manuale. Inoltre, farlo manualmente non necessariamente interrompe "tutti i vantaggi di ClickOnce" ... I vantaggi di ClickOnce è che puoi modificare il client, ripubblicare e i computer client aggiorneranno automaticamente ...

Suppongo che l'altra opzione sia scrivere uno script che ottenga e installi .NET 3.5 e quindi installi l'applicazione, non l'ho mai fatto prima ... Sono ragionevolmente sicuro che funzionerebbe ... In realtà, tu potrebbe distribuire uno script di avvio tramite Criteri di gruppo che ottenga anche .NET 3.5, sarebbe molto semplice.

Forse NAnt potrebbe essere sfruttato per automatizzare la modifica dell'URL di distribuzione. Lo uso per automatizzare i miei build ClickOnce e cambiare la versione build del manifest. ClickOnce with NAnt descrive come L'ho fatto.

Seconda domanda:

Puoi utilizzare la destinazione di pubblicazione di MSBuild su un progetto, una soluzione o un file MSBuild in questo modo:

C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe "C:\path\foo.vbproj" /target:Publish /property:"PublishUrl=http://clickonce/is/kinda/cool/" /property:"PublishUrl=http://clickonce/is/kinda/cool/" 

PublishUrl è la posizione in cui l'applicazione verrà pubblicata nell'IDE. Viene inserito nel manifest dell'applicazione ClickOnce se non viene specificata la proprietà InstallUrl UpdateUrl .

InstallUrl (non mostrato) è la posizione da cui gli utenti installeranno l'applicazione. Se specificato, questo valore viene masterizzato nel bootstrapper setup.exe se la proprietà IsWebBootstrapper è abilitata. Viene inoltre inserito nel manifest dell'applicazione se UpdateUrl non è specificato.

Prima domanda:

Se la risposta di cui sopra non si prende cura delle tue esigenze, allora mi sembra che tu stia affrontando un problema tipico; come si ottiene un eseguibile di Windows (nel tuo caso .NET Framework 3.5) installato su più desktop. Esistono molteplici soluzioni come Criteri di gruppo (GP) script o WMI .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top