我的应用程序安装文件正在使用WiX生成。在WiX配置中,我正在关联与应用程序一起使用的文件类型。如何在WiX配置中将图标与此文件类型相关联?
答案 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=""[INSTALLDIR]stackoverflow.exe" /openwebsite "%1"" 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中注册特定文件类型(扩展名)的图标。