Pregunta

Quiero desplegar un VSTO 3 Nivel de Aplicación Word 2007 complemento que he escrito con Visual Studio 2008. Veo que tiene una WiX WixOfficeExtension llamado extensión que parece que podría tener esta funcionalidad, pero no puedo encontrar ningún documentación para ella, y no puedo discernir su propósito a partir del código fuente.

¿Alguien ha intentado esto antes, y que fueron capaces de llevarlo a cabo con éxito?

¿Fue útil?

Solución

Este es el código que terminé usando. Básicamente portado los ejemplos de MSDN usar WiX.

Nota: Esta solución específica es sólo por un complemento de 2.007 Palabra, pero en el caso de Excel es muy similar. Simplemente modifique los controles de registro de componentes y / llaves / valores de acuerdo con la citada MSDN artículo .

Inclusión de lista de acciones personalizadas

Con el fin de ejecutar los complementos con plena confianza, hay que añadir a la Lista de Inclusión para el usuario actual. La única manera de hacer esto es fiable con una acción personalizada. Se trata de un puerto de la acción personalizada en el artículo a la nueva < a href = "http://blog.deploymentengineering.com/2008/05/deployment-tools-foundation-dtf-custom.html" rel = "noreferrer"> Fundación herramientas de implementación incluye con WiX.

Para usarlo, crear un nuevo proyecto llamado DTF VSTOCustomAction y añadir 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;
        }

    }
}

Wix Fragmento

Obviamente necesitamos el archivo WiX real para instalar el complemento. Hacer referencia a ella desde sus principales .wcs presentar ante

<FeatureRef Id="MyAddinComponent"/>
Addin.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>

Esperamos que esto ahorra algún tiempo para que alguien por ahí.

Otros consejos

Me sorprende que nadie ha respondido a esto ... estado investigando complementos, así que sólo voy a volcar algunos enlaces aquí. Yo no estoy seguro de si ya ha encontrado la solución para lo que estaba buscando, pero esto puede ayudar a otras personas que buscan como yo:

La respuesta es la instalación de VSTO 3.0 complementos para la oficina funciona para Wix, pero no sé nada acerca de este WixOfficeExtension? Para mí para conseguir que funcione no fue una tarea sencilla y que necesito un poco de cosas para hacer esto a cabo correctamente:

Paso 1. ¿Realmente quiero utilizar un VSTO?

Vea aquí: http://social.msdn.microsoft.com/Forums/en -US / vsto / hilo / 3f97705a-6.052-4.296-A10A-bfa3a39ab4e7 / #) http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/3f97705a-6052-4296-a10a-bfa3a39ab4e7 / #

Paso 2. Ok VSTO es correcto leer aquí:

Desde MS Misha Shneerson-- Implementación de VSTO para 2007: http://blogs.msdn.com/mshneer/archive /2006/01/05/deployment-articles.aspx Información de implementación de Microsoft aquí: http://msdn.microsoft.com/en-us/library/bb386179. aspx #

Paso 3. ¿Es necesario instalar más de un complemento a la vez o si desea utilizar WIX porque yo quiero? Ir al paso 4.

Si no utiliza el instalador en el estudio visual y hacer su vida más fácil ... Aquí es Microsoft de configuración de instalación, forma más fácil: http://msdn.microsoft.com/ en-us / library / cc563937.aspx

Ir aquí para encontrar un buen resumen de consejos / ideas. Hojeo los foros en busca de ayuda, así que aquí, sitio muy bueno (bien resumida, geered para Outlook, pero aplicable a la oficina.): http://www.outlookcode.com/article.aspx?ID=42

Paso 4. Wix

A) Obtener familiarizados con este lo necesita: Entradas de registro de nivel de aplicación para complementos http://msdn.microsoft.com/en-us/library/bb386106. aspx #

B) Utilizar el objeto de configuración basada en Windows Installer en Visual Studio para generar un archivo MSI.

C) Prueba de que MSI y asegúrese de que el complemento funciona utilizando el Microsoft MSI. Confía en mí que muchos de los problemas que llevan más tiempo aquí.

D) Ejecutar dark.exe (en Wix bin) y echar un vistazo a la configuración del registro que se crearon para el archivo de salida.

E) Añadir estos valores del registro en el archivo de Wix.
--Que hizo encontrar este blog un poco de ayuda, pero que era para complementos COM para Excel: http://matthewrowan.spaces.live.com/blog/cns!CCB05A30BCA0FF01!143.entry

F) Ejecutar y desplegar.

Nota: Voy a añadir más aquí ya que me parece más aquí. Todavía estoy aprendiendo Wix y lo que puedo hacer con ella en términos de complementos, etc. Wix es grande, Oficina complementos despliegue es un dolor real.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top