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

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

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


person Jacob    schedule 10.02.2009    source источник


Ответы (2)


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

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

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

Чтобы запускать надстройки с полным доверием, их необходимо добавить в список включения для текущего пользователя. Единственный надежный способ сделать это — использовать настраиваемое действие. Это перенос пользовательского действия из статьи на новый < href="http://blog.deploymentengineering.com/2008/05/deployment-tools-foundation-dtf-custom.html" rel="noreferrer">Deployment Tools Foundation, входящий в состав 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"/>
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>

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

person Jacob    schedule 24.03.2009
comment
PropertyAssign_ManifestLocation также следует оценивать перед RemoveFromInclusionList, в противном случае основные обновления не будут выполнены. - person Rinat Abdullin; 14.09.2009
comment
Стоит отметить, что блок RSAKeyValue можно найти в файле ‹YourAddin›.dll.manifest после успешного создания проекта надстройки. Мне потребовалось довольно много времени, чтобы понять, где это было. - person shellscape; 21.11.2012

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

Ответ: установка надстроек 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-US/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, но применимый к офису): rel="noreferrer">http://www.outlookcode.com/article.aspx?ID=42

Шаг 4. Wix

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

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

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

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

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

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

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

person Brian    schedule 03.03.2009
comment
Мне действительно удалось это сделать, опубликую ответ, как только позволит время... - person Jacob; 04.03.2009
comment
Очень хорошо. Я надеюсь, что это поможет другим, так как wix не самый простой способ работать с надстройками. На самом деле я много работал над надстройками COM, но также тестировал VSTO. - person Brian; 04.03.2009