如何使用WiX为关联文件设置图标?

时间:2009-03-12 11:22:11

标签: wix

我的应用程序安装文件正在使用WiX生成。在WiX配置中,我正在关联与应用程序一起使用的文件类型。如何在WiX配置中将图标与此文件类型相关联?

4 个答案:

答案 0 :(得分:8)

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

如果您的应用程序处理自己的文件数据类型,则需要为其注册文件关联。将ProgId放入组件中。 FileId应该引用File元素的Id属性,该元素描述了用于处理此扩展文件的文件。请注意感叹号:它将返回文件的短路径而不是长路径:

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

答案 1 :(得分:7)

这就是我做的。我宣布:

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

答案 2 :(得分:0)

我建议关注位于here的堆栈溢出帖子,以便将图标嵌入资源的最简单,最优雅的方式,而无需在托管的.NET应用程序中使用c ++项目。

接下来,这是通过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>

此示例注册位于步骤1的程序集中的特定文件扩展名(.stackoverflow)的默认图标。它还显示如何创建Windows资源管理器关联的右键单击命令以及向Windows添加菜单项资源管理器新子菜单。

由于

-Blake Niemyjski

答案 3 :(得分:0)

请注意,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-project安装的应用程序创建的拨号注册文件/图标关联。 要使一个图标在Windows中的所有对话框,桌面等中整体显示,您还需要在regedit中注册特定文件类型(扩展名)的图标。