Abbiamo sviluppato un prodotto che è un addin VSTO standard (Word 2010 e Word 2013, solo x86). Per impostazione predefinita, quando è installato, viene installato per tutti gli utenti (ad esempio le voci del Registro di sistema addin vengono inserite in HKLM - HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node]\Microsoft\Office\Word\Addins
).MS Office Word VSTO "Load On Demand"
Quando il valore della chiave LoadBehavior
reg è impostato 0x3
(cioè "Carica all'avvio"), il componente aggiuntivo funziona perfettamente soddisfacente, tuttavia quando abbiamo impostato il valore per LoadBehavior
a 0x10
(cioè "Load on demand"), il componente aggiuntivo non funziona come ci si aspetterebbe:
causa di UAC (e che Word non viene eseguito elevato), il valore di LoadBehavior
in HKLM non è cambiato 0x10
-0x9
ma invece è sovrascritto con la creazione di una chiave LoadBehavior
(con valore 0x9
) nell'hive HKCU.
Purtroppo, abbiamo trovato che questo valore sottoposto a override HKCU non viene preso in considerazione senza la chiave manifesto è presente nel alveare HKCU con LoadBehavior
). Ulteriori informazioni su questo thread corrispondenti https://social.msdn.microsoft.com/Forums/vstudio/en-US/3776734b-333e-423b-9c08-7c7a441c3e94/load-behavior-and-word-addin?forum=vsto
Il rimedio 'ovvio' per questo problema è quello di scrivere il Manifest
in HKCU per ciascun utente (così come in HKLM) al momento dell'installazione O quando ogni utente esegue il modulo aggiuntivo la prima volta. Ci sono tuttavia alcuni gravi inconvenienti con questo approccio:
- disinstallare il componente aggiuntivo richiede la rimozione ogni utente valori HKCU per impedire agli utenti verificano problemi di carico (questo non è raccomandato e pone altre questioni/complicazioni, come la necessità di utilizzare l'installazione Attivo - Remove registry keys under HKCU on a per machine installation).
- Gli utenti che hanno questi valori nel proprio hive HKCU (in roaming), riscontrano problemi durante l'accesso a una macchina nello stesso dominio in cui non è installato il nostro addin.
Si tratta di un bug che il manifesto non è ottenuta dal HKLM dove il LoadBehavior
è impostato in modo appropriato in HKCU? Penso che questo problema potrebbe essere risolto se lo LoadBehavior
in HKLM potrebbe essere sovrascritto in HKCU senza che sia necessario sovrascrivere il valore Manifest
.
Qualcuno conosce un modo per superare questo problema?
Grazie per questo @ dirk-vollmar. Giusto per chiarire, la ragione principale alla base del voler usare 'LoadOnDemand' non è perché abbiamo un lento add-on, ma è perché abbiamo molti e molti add-in che sono tutti business-critical. Questi competono per risorse e spesso "conflitto" ed errore se caricati contemporaneamente. Purtroppo dobbiamo vivere in un mondo in cui non possiamo cambiare i componenti aggiuntivi degli altri, e quando ne hai tanti come la maggior parte dei nostri clienti, non puoi chiedere a tutti di migliorare il loro carico. – RoKa