我正在使用WIX为我的应用程序构建一个msi安装程序。对于安装在开始菜单中的快捷方式,图标会正确显示。当我在开始菜单搜索栏中输入应用程序的名称时,搜索结果包括我的应用程序,但该图标是来自Windows的通用图标。
这似乎不一致,但通常无符号的msi工作正常(图标显示),但签名的msi有问题。
这是另外一个数据点 - 如果我在计算机上创建一个新用户,则应用程序(已为所有用户安装)显示并且在搜索开始菜单时图标是正确的。
对于它的价值,我正在使用visual studio集成来构建安装程序。
应用程序本身是一个用C#编写的.Net可执行文件,带有一些本机依赖项。
使用crypto混淆器对应用程序进行模糊处理。
请注意,有一个单独的本地化资源dll可以使短信件具有本地化文本。目前尚不清楚这是否会影响图标
这是wxs。我知道这远非模范,我对任何改进建议持开放态度,但更愿意关注手头的问题:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product Id="*" Name="my name by foo" Language="1033" Codepage="UTF-8" Version="!(bind.FileVersion.barControlPanel)" Manufacturer="foo inc" UpgradeCode="guid1">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Description="Version: !(bind.FileVersion.barControlPanel)"/>
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<Media Id="1" Cabinet="Cab1.cab" EmbedCab="yes" />
<SetProperty Id="ARPINSTALLLOCATION" Value="[INSTALLFOLDER]" After="CostFinalize"/>
<util:CloseApplication Id="CloseApp" CloseMessage="yes" Target="foo.barControlPanel.exe"/>
<Feature Id="ProductFeature" Title="myapptitle by foo" Level="1">
<ComponentGroupRef Id="ProductComponents"/>
<ComponentRef Id="ApplicationShortcut"/>
</Feature>
<Icon Id="myfoobar.ico" SourceFile="..\myfoobar.ico"/>
<Property Id="ARPPRODUCTICON" Value="myfoobar.ico"/>
<Property Id="ARPNOREPAIR" Value="yes" Secure="yes" />
<Property Id="ARPNOMODIFY" Value="yes" Secure="yes" />
<InstallExecuteSequence>
<Custom Action="foo_InstallCheck" Before="LaunchConditions"/>
</InstallExecuteSequence>
</Product>
<Fragment>
<CustomAction Id="foo_InstallCheck" BinaryKey="foo_InstallCheckBinary" DllEntry="CustomAction1" Execute="immediate" Return="check"/>
<Binary Id="foo_InstallCheckBinary" SourceFile="$(var.foo.InstallCheck.TargetDir)$(var.foo.InstallCheck.TargetName)$(var.foo.InstallCheck.TargetExt)"/>
</Fragment>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFiles64Folder">
<Directory Id="fooinc" Name="foo inc">
<Directory Id="INSTALLFOLDER" Name="barControlPanel">
<Directory Id="ja" Name="ja"/>
</Directory>
</Directory>
</Directory>
<Directory Id="CommonAppDataFolder">
<Directory Id="DATAFOLDER" Name="foo inc"/>
</Directory>
<Directory Id="ProgramMenuFolder">
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents">
<!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
<Component Id="ProductComponent" Directory="INSTALLFOLDER">
<!-- TODO: Insert files, registry keys, and other resources here. -->
<File Id="barControlPanel" Source="$(var.ObfuscationProject.TargetDir)foo.barControlPanel.exe" >
<Shortcut Id="ApplicationStartMenuShortcut"
DescriptionResourceDll="[#foobarControlPanelResources]"
DescriptionResourceId="101"
DisplayResourceDll="[#foobarControlPanelResources]"
DisplayResourceId="101"
Directory="ProgramMenuFolder"
Name="my app by foo"
WorkingDirectory="INSTALLFOLDER"
Icon="myfoobar2.ico" IconIndex="0" Advertise="yes">
<Icon Id="myfoobar2.ico" SourceFile="..\myfoobar.ico"/>
</Shortcut>
</File>
<File Id="fooHelp.pdf" Source="..\fooHelp.pdf"/>
<File Id="fooHelp.ja.pdf" Source="..\fooHelp.ja.pdf"/>
<File Id="foobarControlPanelResources" Source="$(var.foo.barControlPanel.Resources.TargetDir)foo.barControlPanel.Resources.dll"/>
</Component>
<Component Id="Resources" Directory="ja">
<File Id="JapaneseResources" Source="$(var.ObfuscationProject.TargetDir)ja\foo.barControlPanel.Resources.dll"/>
</Component>
</ComponentGroup>
</Fragment>
<Fragment>
<DirectoryRef Id="ProgramMenuFolder">
<Component Id="ApplicationShortcut" Guid="GUID2">
<RegistryValue Root="HKCU" Key="Software\foo inc\my app" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
</Fragment>
</Wix>