Domanda

Desidero distribuire un componente aggiuntivo Word 2007 a livello di applicazione VSTO 3 che ho scritto con Visual Studio 2008.Vedo che WiX ha un'estensione denominata WixOfficeExtension che sembra che potrebbe avere questa funzionalità, ma non riesco a trovare alcuna documentazione al riguardo e non riesco a discernere il suo scopo dal codice sorgente.

Qualcuno ha già provato a farlo e sei riuscito a farcela con successo?

È stato utile?

Soluzione

Questo è il codice che ho finito per usare.Fondamentalmente ho portato gli esempi da MSDN per utilizzare WiX.

Nota: Questa soluzione specifica è solo per un componente aggiuntivo di Word 2007, ma il caso di Excel è molto simile.Modificare semplicemente i controlli del registro/componente e le chiavi/valori in base a quanto sopra Articolo MSDN.

Azione personalizzata dell'elenco di inclusione

Per eseguire i componenti aggiuntivi con piena attendibilità, è necessario aggiungerli all'elenco di inclusione per l'utente corrente.L'unico modo per farlo in modo affidabile è con un'azione personalizzata.Questo è un port dell'azione personalizzata nel file articolo al nuovo Fondazione degli strumenti di distribuzione incluso con WiX.

Per usarlo, crea un nuovo progetto DTF chiamato VSTOCustomAction e aggiungi CustomAction.cs.

CustomAction.cs
using System;
using System.Security;
using System.Security.Permissions;
using Microsoft.Deployment.WindowsInstaller;
using Microsoft.VisualStudio.Tools.Office.Runtime.Security;

namespace VSTOCustomActions
{
    public class CustomActions
    {
        private static string GetPublicKey(Session session)
        {
            return session["VSTOCustomAction_PublicKey"];
        }
        private static string GetManifestLocation(Session session)
        {
            return session["VSTOCustomAction_ManifestLocation"];
        }
        private static void ErrorMessage(string message, Session session)
        {
            using (Record r = new Record(message))
            {
                session.Message(InstallMessage.Error, r);
            }
        }

        [CustomAction]
        public static ActionResult AddToInclusionList(Session session)
        {
            try
            {
                SecurityPermission permission =
                    new SecurityPermission(PermissionState.Unrestricted);
                permission.Demand();
            }
            catch (SecurityException)
            {
                ErrorMessage("You have insufficient privileges to " +
                    "register a trust relationship. Start Excel " +
                    "and confirm the trust dialog to run the addin.", session);
                return ActionResult.Failure;
            }

            Uri deploymentManifestLocation = null;
            if (Uri.TryCreate(GetManifestLocation(session),
                UriKind.RelativeOrAbsolute, out deploymentManifestLocation) == false)
            {
                ErrorMessage("The location of the deployment manifest is missing or invalid.", session);
                return ActionResult.Failure;
            }

            AddInSecurityEntry entry = new AddInSecurityEntry(deploymentManifestLocation, GetPublicKey(session));
            UserInclusionList.Add(entry);

            session.CustomActionData.Add("VSTOCustomAction_ManifestLocation", deploymentManifestLocation.ToString());

            return ActionResult.Success;

        }

        [CustomAction]
        public static ActionResult RemoveFromInclusionList(Session session)
        {
            string uriString = session.CustomActionData["VSTOCustomAction_ManifestLocation"];
            if (!string.IsNullOrEmpty(uriString))
            {
                Uri deploymentManifestLocation = new Uri(uriString);
                UserInclusionList.Remove(deploymentManifestLocation);
            }
            return ActionResult.Success;
        }

    }
}

Frammento di Wix

Ovviamente abbiamo bisogno del file WiX effettivo per installare il componente aggiuntivo.Fatevi riferimento dal vostro file .wcs principale con

<FeatureRef Id="MyAddinComponent"/>
Aggiungere.wcs
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment Id="Word2007Fragment">

      <!-- Include the VSTO Custom action  -->
      <Binary Id="VSTOCustomAction" SourceFile="path\to\VSTOCustomAction.dll"/>
      <CustomAction Id="AddToInclusionList" BinaryKey="VSTOCustomAction" DllEntry="AddToInclusionList" Execute="immediate"/>
      <CustomAction Id="RemoveFromInclusionList" BinaryKey="VSTOCustomAction" DllEntry="RemoveFromInclusionList" Execute="immediate"/>

      <!-- Set the parameters read by the Custom action -->
      <!-- 
        The public key that you used to sign your dll, looks something like <RSAKeyValue><Modulus>...</Modulus><Exponent>...</Exponent></RSAKeyValue>
        Take note: There should be no whitespace in the key!
      -->
      <Property Id="VSTOCustomAction_PublicKey"><![CDATA[Paste you public key here]]></Property>
      <CustomAction Id="PropertyAssign_ManifestLocation" Property="VSTOCustomAction_ManifestLocation" Value="[INSTALLDIR]MyAddin.MyAddin.vsto" />

      <!-- Properties to check prerequisites -->
      <Property Id="VSTORUNTIME">
        <RegistrySearch Id="RegistrySearchVsto"
                        Root="HKLM"
                        Key="SOFTWARE\Microsoft\vsto runtime Setup\v9.0.30729"
                        Name="SP"
                        Type="raw"/>
      </Property>
      <Property Id="HASWORDPIA">
        <ComponentSearch Id="ComponentSearchWordPIA"
                         Guid="{816D4DFD-FF7B-4C16-8943-EEB07DF989CB}"/>
      </Property>
      <Property Id="HASSHAREDPIA">
        <ComponentSearch Id="ComponentSearchSharedPIA"
                         Guid="{FAB10E66-B22C-4274-8647-7CA1BA5EF30F}"/>
      </Property>


      <!-- Feature and component to include the necessary files -->
      <Feature Id="MyAddinComponent" Title ="Word 2007 Addin" Level="1" AllowAdvertise="no">
        <ComponentRef Id="MyAddinComponent"/>
        <Condition Level="0"><![CDATA[NOT ((VSTORUNTIME="#1") AND HASSHAREDPIA AND HASWORDPIA)]]></Condition>
      </Feature>

      <DirectoryRef Id="INSTALLDIR">
          <Component Id="MyAddinComponent" Guid="your component guid here">
              <File Name="MyAddin.dll" Source="path\to\MyAddin.dll" />
              <File Name="MyAddin.dll.manifest" Source="path\to\MyAddin.dll.manifest" />
              <File Name="MyAddin.vsto" Source="path\to\MyAddin.vsto" />
              <RegistryKey Root="HKCU"
                  Key="Software\Microsoft\Office\Word\Addins\MyAddin"
                  Action="createAndRemoveOnUninstall">
                <RegistryValue Type="string" Name="FriendlyName" Value="MyAddin Word 2007 Addin" />
                <RegistryValue Type="string" Name="Description" Value="MyAddin Word 2007 Addin" />
                <RegistryValue Type="string" Name="Manifest" Value="[INSTALLDIR]MyAddin.vsto|vstolocal" KeyPath="yes"/>
                <RegistryValue Type="integer" Name="LoadBehavior" Value="3"/>
              </RegistryKey>
          </Component>
      </DirectoryRef>

      <!-- Modify the install sequence to call our custom action -->
      <InstallExecuteSequence>
        <Custom Action="AddToInclusionList" After="InstallFinalize"><![CDATA[(&MyAddinComponent = 3) AND NOT (!MyAddinComponent = 3)]]></Custom>
        <Custom Action="PropertyAssign_ManifestLocation" Before="AddToInclusionList"><![CDATA[(&MyAddinComponent = 3) AND NOT (!MyAddinComponent = 3)]]></Custom>
        <Custom Action="RemoveFromInclusionList" After="InstallFinalize"><![CDATA[(&MyAddinComponent = 2) AND NOT (!MyAddinComponent = 2)]]></Custom>
      </InstallExecuteSequence>
    </Fragment>
</Wix>

Spero che questo faccia risparmiare tempo a qualcuno là fuori.

Altri suggerimenti

Sono sorpreso che nessuno ha risposto a questa ... io fatto ricerche Addins, quindi mi limiterò a scaricare un po 'di link qui. Io non sono sicuro che se avete già trovato la soluzione per quello che stavi cercando, ma questo può aiutare gli altri in cerca come me:

La risposta è l'installazione di VSTO 3.0 componenti aggiuntivi per l'ufficio funziona per Wix, ma non so niente di questo WixOfficeExtension? Per me per farlo, non di lavoro è stato un compito semplice e avete bisogno di un po 'di cose per ottenere questo compiuto correttamente:

Passaggio 1. Voglio davvero usare un VSTO?

Vedi qui: http://social.msdn.microsoft.com/Forums/en -US / VSTO / thread / 3f97705a-6052-4296-A10A-bfa3a39ab4e7 / #) http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/3f97705a-6052-4296-a10a-bfa3a39ab4e7 / #

Punto 2. Ok VSTO si legge proprio qui:

Da MS Misha Shneerson-- Distribuzione di VSTO per il 2007: http://blogs.msdn.com/mshneer/archive /2006/01/05/deployment-articles.aspx Microsoft Deployment informazioni qui: http://msdn.microsoft.com/en-us/library/bb386179. aspx #

Passaggio 3. Ho bisogno di installare più di un componente aggiuntivo alla volta o si desidera utilizzare WIX Perché lo voglio? Vai al punto 4.

Se non utilizza il programma di installazione in Visual Studio e rendere la vita facile ... Ecco setup di installazione Microsofts, modo più semplice: http://msdn.microsoft.com/ it-it / library / cc563937.aspx

Vai qui per trovare una una buona sintesi di suggerimenti / idee. Navigo i forum per aiutare come bene qui, ottimo sito (ben sintetizzato, geered per Outlook, ma applicabile a ufficio):. http://www.outlookcode.com/article.aspx?ID=42

Punto 4. Wix

A) Ottenere familiarità con questo è necessario che: voci di registro per livello di applicazione di componenti aggiuntivi http://msdn.microsoft.com/en-us/library/bb386106. aspx #

B) Utilizzare l'oggetto configurazione base da installazione di Windows in Visual Studio per generare un file MSI.

c) Prova che MSI e assicurarsi che il componente aggiuntivo funziona utilizzando il Microsoft MSI. Fidati di me che molti dei problemi che si prendono più tempo qui.

D) Run dark.exe (in Wix bin) e dare un'occhiata alle impostazioni di registro che sono stati creati per il file di output.

E) Aggiungere queste impostazioni di registro nel file Wix.
--I trovato questo blog un po 'utile, ma è stato per addons com per Excel: http://matthewrowan.spaces.live.com/blog/cns!CCB05A30BCA0FF01!143.entry

F) Eseguire e distribuire.

Nota: Vorrei aggiungere di più qui come trovo di più qui. Sto ancora imparando Wix e quello che posso fare con esso in termini di componenti aggiuntivi, ecc Wix è grande, Ufficio AddIns distribuzione è un dolore reale.

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