Comment utiliser WiX pour déployer les addins VSTO 3.0?

je veux déployer un VSTO 3 Application niveau Word 2007 Ajouter que j'ai écrit avec Visual Studio 2008. Je vois que WiX a une extension nommée WixOfficeExtension qui semble avoir cette fonctionnalité, mais je ne peux pas trouver de documentation pour elle, et je ne peux pas discerner son but à partir du code source.

quelqu'un a-t-il déjà essayé cela, et avez-vous réussi à le faire?

20
demandé sur Yan Sklyarenko 2009-02-10 17:01:31

2 réponses

C'est le code que j'ai fini par utiliser. J'ai essentiellement porté les exemples de MSDN pour utiliser WiX.

Remarque: Cette solution est uniquement pour un addin Word 2007, mais le cas pour Excel est très similaire. Il suffit de modifier les vérifications du registre/composant et les clés / valeurs selon les article MSDN.

Liste D'Inclusion Action Personnalisée

pour exécuter addins en toute confiance, il doit être ajouté au Liste d'Inclusion pour l'utilisateur courant. La seule façon de le faire de manière fiable, est une action personnalisée. C'est un portage de l'action personnalisée dans le article à la Outils De Déploiement De La Fondation inclus avec WiX.

pour l'utiliser, créez un nouveau projet DTF appelé VSTOCustomAction et ajoutez 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 Fragment

nous avons évidemment besoin du fichier WiX réel pour installer l'addin. La référence de votre principal. wcs fichier avec

<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>

J'espère que cela fera gagner du temps à quelqu'un là-bas.

21
répondu Jacob 2009-03-24 16:56:24

je suis surpris que personne n'ait répondu à cette question... J'ai fait des recherches sur Addins, donc je vais juste jeter quelques liens ici. Je ne suis pas sûr que vous si vous avez déjà trouvé la solution pour ce que vous cherchiez, mais cela peut aider d'autres à la recherche comme moi:

la réponse est l'installation de VSTO 3.0 addins pour office fonctionne pour wix, mais je ne sais rien à propos de cette extension WixOfficeExtension? Pour moi de le faire fonctionner n'était pas une tâche simple et vous avez besoin de beaucoup de choses pour obtenir ce accompli correctement:

Étape 1. Est-ce que je veux vraiment utiliser un VSTO?

voir ici: 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/#

Étape 2. Ok VSTO est juste à lire ici:

de Mme Misha Shneerson -- déploiement de VSTO pour 2007: http://blogs.msdn.com/mshneer/archive/2006/01/05/deployment-articles.aspx Microsoft Déploiement d'infos ici: http://msdn.microsoft.com/en-us/library/bb386179.aspx#

Étape 3. Est-ce que je dois installer plus d'un addin à la fois ou je veux utiliser WIX parce que je le veux? Passez à l'étape 4.

si ce n'est pas le cas, utilisez l'installateur de visual studio et facilitez votre vie... Voici Microsofts setup installer, voie la plus facile:http://msdn.microsoft.com/en-us/library/cc563937.aspx

rendez-vous ici pour trouver un bon résumé des conseils/idées. Je parcours les forums pour obtenir de l'aide ici, très bon site.(eh bien, en résumé, geered pour outlook, mais applicable à l'office): http://www.outlookcode.com/article.aspx?ID=42

Étape 4. Wix

a)familiarisez-vous avec ce dont vous avez besoin: entrées de Registre pour le niveau Application Add-Ins http://msdn.microsoft.com/en-us/library/bb386106.aspx#

B) utilisez l'objet setup basé sur Windows installer dans visual studio pour générer un fichier MSI.

C)testez ce msi et assurez-vous que votre addin fonctionne en utilisant le microsoft MSI. Croyez-moi, beaucoup de problèmes vous prennent le plus de temps ici.

D)Courir sombre.exe (dans Wix bin) et jetez un oeil aux paramètres de Registre qui ont été créés pour la sortie fichier.

E)ajoutez ces paramètres de Registre dans votre fichier wix.

--Je n'ai trouver ce blog sera un peu utile, mais c'était pour com addons pour Excel: http://matthewrowan.spaces.live.com/blog/cns!CCB05A30BCA0FF01!143.entrée

F)exécuter et déployer.

Note: je vais ajouter plus d'ici que je trouve plus ici. Je suis encore en train d'apprendre Wix et ce que je peux en faire en termes d'addins, etc. Wix est grande, Bureau de compléments de déploiement est un royal douleur.

8
répondu Brian 2009-03-03 21:39:46