Как я могу установить значок для связанного файла с помощью WiX?

Файл установки моего приложения создается с использованием WiX. В конфигурации WiX я связываю тип файла, который работает с приложением. Как я могу связать значок с этим типом файла в конфигурации WiX?


wix
person Draco    schedule 12.03.2009    source источник


Ответы (4)


ОТ: http://www.tramontana.co.hu/wix/lesson1.php#1.7

Если ваше приложение обрабатывает свой собственный тип файловых данных, вам потребуется зарегистрировать для него файловую ассоциацию. Поместите ProgId внутри вашего компонента. FileId должен ссылаться на атрибут Id элемента File, описывающего файл, предназначенный для обработки файлов с этим расширением. Обратите внимание на восклицательный знак: он вернет короткий путь к файлу вместо длинного:

<ProgId Id='AcmeFoobar.xyzfile' Description='Acme Foobar data file'>
  <Extension Id='xyz' ContentType='application/xyz'>
    <Verb Id='open' Sequence='10' Command='Open' Target='[!FileId]' Argument='"%1"' />
  </Extension>
</ProgId>

Чтобы назначить иконку этому типу файлов, вы должны сами указать соответствующие записи реестра внутри вашего компонента:

<Registry Id='FooIcon1' Root='HKCR' Key='.xyz' Action='write'
  Type='string' Value='AcmeFoobar.xyzfile' />
<Registry Id='FooIcon2' Root='HKCR' Key='AcmeFoobar.xyzfile' Action='write'
  Type='string' Value='Acme Foobar data file' />
<Registry Id='FooIcon3' Root='HKCR' Key='AcmeFoobar.xyzfile\DefaultIcon' Action='write'
  Type='string' Value='[INSTALLDIR]Foobar.exe,1' />
person Greg Dean    schedule 12.03.2009
comment
И на что ссылается Foobar.exe внутри Value='[INSTALLDIR]Foobar.exe,1' /›? И где он обитает? - person Filip; 16.04.2015

Вот как я это сделал. Я заявил:

<Icon Id="Icon.exe" SourceFile="..\Installer\Graph.ico" />

перед </Product> и добавил его в качестве ссылки следующим образом:

<ProgId Id='myApp.exe' Description='Some description' Advertise='yes' Icon='Icon.exe'>
          <Extension Id='xyz' ContentType='application/text'>
            <Verb Id='open' Sequence='10' Command='Open' Argument='"%1"' />
          </Extension>
</ProgId>
person Draco    schedule 12.03.2009
comment
Для нерекламируемого ProgId используйте ‹File/› вместо ‹Icon/› для ссылки на файл ico. Для ‹Verb› потребуется TargetFile и удаление Sequence. Из: stackoverflow.com/a/34308271/1460018 - person Trevor; 09.05.2018

Я бы порекомендовал следовать моему сообщению о переполнении стека, расположенному здесь для самого простого и элегантного способа встраивания значков в ресурс без необходимости в проекте C++ в управляемом приложении .NET.

Далее, вот правильный способ установить это через wix:

  <Component Id="stackoverflowFileRegistration" Guid="MY_GUID">

    <RegistryKey Root="HKCR" Key=".stackoverflow" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes">
      <RegistryValue Value="stackoverflow.Document" Type="string" KeyPath="yes" />
      <RegistryValue Name="Content Type" Value="application/stackoverflow" Type="string" />
      <RegistryKey Key="ShellNew" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes">
        <RegistryValue Name="NullFile" Value="" Type="string" />
        <RegistryValue Name="Data" Value="Default new document Content.. NOTE: you must use a MutiStringValue nodes for multi-line content...." Type="string"/>
      </RegistryKey>
    </RegistryKey>

    <RegistryKey Root="HKCR" Key="stackoverflow.Document" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes">
      <RegistryValue Value="stackoverflow Document" Type="string" />

      <RegistryKey Key="DefaultIcon" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes">
        <RegistryValue Value="[INSTALLDIR]bin\stackoverflow.lib.dll, 1" Type="string" />
      </RegistryKey>

      <RegistryKey Key="Shell" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes">
        <RegistryKey Key="openstackoverflowwebsite" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes">
          <RegistryValue Value="Open Stackoverflow" Type="string" />
          <RegistryKey Key="command" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes">
            <RegistryValue Value="&quot;[INSTALLDIR]stackoverflow.exe&quot; /openwebsite &quot;%1&quot;" Type="string" />
          </RegistryKey>
        </RegistryKey>
      </RegistryKey>

    </RegistryKey>
  </Component>

В этом образце регистрируется значок по умолчанию для определенного расширения файла (.stackoverflow), расположенного в сборке из шага 1. Он также показывает, как создавать связанные с проводником Windows команды щелчка правой кнопкой мыши, а также добавляет элемент меню в новый подраздел проводника Windows. меню.

Спасибо

-Блейк Нимийски

person Blake Niemyjski    schedule 02.05.2012

Обратите внимание, что ответа Dracos недостаточно для полной ассоциации значков/файлов.

Следующий код:

Вот как я это сделал. Я заявил:

<Icon Id="Icon.exe" SourceFile="..\Installer\Graph.ico" /> 
<ProgId Id='myApp.exe' Description='Some description' Advertise='yes' Icon='Icon.exe'>
          <Extension Id='xyz' ContentType='application/text'>
            <Verb Id='open' Sequence='10' Command='Open' Argument='"%1"' />
          </Extension>
</ProgId>

Регистрирует только ассоциацию файла/значка для диалогов, созданных приложением, которое установлено данным wix-проектом. Чтобы получить значок, который отображается в целом для всех диалогов, рабочего стола и т. д. в Windows, вам также необходимо зарегистрировать значок для определенного типа файла (расширения) в regedit.

person adaem    schedule 06.08.2019