Как вы используете WiX для развертывания надстроек VSTO 3.0?

StackOverflow https://stackoverflow.com/questions/532447

Вопрос

Я хочу развернуть надстройку Word 2007 уровня приложения VSTO 3, которую я написал с помощью Visual Studio 2008.Я вижу, что у WiX есть расширение под названием WixOfficeExtension, которое выглядит так, как будто оно может иметь эту функциональность, но я не могу найти никакой документации по нему и не могу понять его назначение из исходного кода.

Кто-нибудь пытался это сделать раньше, и удалось ли вам это успешно осуществить?

Это было полезно?

Решение

Это код, который я в конечном итоге использовал.Я в основном портировал примеры из MSDN использовать WiX.

Примечание: Это конкретное решение предназначено только для надстройки Word 2007, но случай с Excel очень похож.Просто измените проверки реестра/компонентов и ключи/значения в соответствии с вышеупомянутым. Статья MSDN.

Пользовательское действие списка включений

Чтобы запускать надстройки с полным доверием, их необходимо добавить в список включения для текущего пользователя.Единственный способ сделать это надежно — использовать настраиваемое действие.Это порт пользовательского действия в статья к новому Фонд средств развертывания входит в состав WiX.

Чтобы использовать его, создайте новый проект DTF под названием VSTOCustomAction и добавьте 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

Очевидно, нам нужен сам файл WiX для установки надстройки.Ссылка на него из вашего основного файла .wcs с помощью

<FeatureRef Id="MyAddinComponent"/>
Аддин.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>

Надеюсь, что это сэкономит кому-то время.

Другие советы

Я удивлен, что никто не ответил на этот вопрос...Я исследовал Addins, поэтому просто оставлю здесь несколько ссылок.Я не уверен, что вы уже нашли решение того, что искали, но это может помочь другим, ищущим, как я:

Ответ: установка надстроек vsto 3.0 для офиса работает для Wix, но я ничего не знаю об этом WixOfficeExtension?Для меня заставить его работать было непростой задачей, и вам нужно немало вещей, чтобы сделать это правильно:

Шаг 1.Действительно ли я хочу использовать VSTO?

Глянь сюда: http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/3f97705a-6052-4296-a10a-bfa3a39ab4e7/#)http://social.msdn.microsoft.com/Forums/en- США/vsto/thread/3f97705a-6052-4296-a10a-bfa3a39ab4e7/#

Шаг 2.Хорошо, VSTO прав, читайте здесь:

От MS Миша Шнеерсон - Развертывание VSTO в 2007 году: http://blogs.msdn.com/mshneer/archive/2006/01/05/deployment-articles.aspx Информация о развертывании Microsoft здесь: http://msdn.microsoft.com/en-us/library/bb386179.aspx#

Шаг 3.Нужно ли мне устанавливать более одной надстройки одновременно или я хочу использовать WIX, потому что мне это нужно? Перейдите к шагу 4.

Если нет, используйте установщик в Visual Studio и облегчите себе жизнь...Вот установщик установки Microsoft, самый простой способ: http://msdn.microsoft.com/en-us/library/cc563937.aspx

Перейдите сюда, чтобы найти хорошее резюме советов/идей.Я также просматриваю форумы в поисках помощи, очень хороший сайт (хорошо резюмировано, ориентировано на Outlook, но применимо к офису): http://www.outlookcode.com/article.aspx?ID=42

Шаг 4.Викс

А) Ознакомьтесь с этим, вам это нужно:Записи реестра для надстроек уровня приложения http://msdn.microsoft.com/en-us/library/bb386106.aspx#

Б) Используйте объект установки на основе установщика Windows в Visual Studio для создания файла MSI.

В) Проверьте этот MSI и убедитесь, что ваша надстройка работает с использованием Microsoft MSI.Поверьте мне, что многие проблемы отнимают у вас здесь больше всего времени.

D) Запустите dark.exe (в корзине Wix) и посмотрите настройки реестра, созданные для выходного файла.

E) Добавьте эти настройки реестра в свой файл Wix.
--Я нашел этот блог немного полезным, но он был посвящен расширениям com для Excel: http://matthewrowan.spaces.live.com/blog/cns!CCB05A30BCA0FF01!143.entry

F) Запустите и разверните.

Примечание:Я добавлю сюда больше, поскольку найду больше здесь.Я все еще изучаю Wix и что я могу с ним делать с точки зрения надстроек и т. д.Wix великолепен, а развертывание надстроек Office — это настоящая боль.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top