2012-11-20 6 views
5

Vorrei determinare la versione di Office/Excel in un componente aggiuntivo VSTO quando CreateRibbonExtensibilityObject() viene richiamato nell'addin. Ho incontrato un problema con questo, e ho incontrato:Determinare la versione di Office in VSTO 4. Prima dell'applicazione. L'applicazione è impostata

  • la this.Application del componente aggiuntivo è null, ma non è ancora impostato per VSTO in questo momento.
  • il ThisAddIn_Startup(..) viene chiamato dopo il CreateRibbonExtensibilityObject().

this.Application.Version non è ancora disponibile poiché l'Addin sembra non ancora inizializzato in questo momento. C'è un modo per determinare la versione di Excel (12, 14 o 15) nel momento in cui il runtime VSTO chiama CreateRibbonExtensibilityObject() sul componente aggiuntivo?

UPDATE

Trovare che l'ItemProvider è stato istanziato, ho usato il seguente per ottenere la versione principale ufficio.

FieldInfo temp = this.ItemProvider.GetType().GetField("_officeVersion", BindingFlags.NonPublic | BindingFlags.Instance); 
uint officeVersion = (uint)temp.GetValue(this.ItemProvider); 

Accetto anche la risposta di SliverNinja.

+0

La risposta a [un'altra domanda] (https://stackoverflow.com/questions/28925050/how-to-know-which-word-version-is-installed-from-my-add-in- ribbon-with-c-shar) suggerisce che la premessa di questa domanda (che non può essere recuperata nel metodo di avvio) non è più valida per un componente aggiuntivo a livello di applicazione. L'ho provato anche in una soluzione a livello di documento nel metodo di avvio, e andava bene. – Chris

+0

@ Chris, che non ha nulla a che fare con questa domanda. CreateRibbonExtensibilityObject viene chiamato prima del metodo di avvio. Questa domanda ha chiesto in particolare come ottenere la versione precedente al metodo di avvio. – Dan

+0

Ah, mio ​​errore. – Chris

risposta

0

sto usando il FileVersionInfo del MainModule. Spero che questo salvi l'accesso al file per estrarre le informazioni sulla versione.

int majorVersion = Process.GetCurrentProcess().MainModule.FileVersionInfo.ProductMajorPart; 
Problemi correlati