在WIX,你如何创建在ALLUSERS非广告快捷方式个人资料? 到目前为止,我只能够与标榜的快捷方式做到这一点。 我更喜欢非广告的快捷方式,因为你可以去快捷方式的属性,并使用“查找目标”。
在教程我见过使用注册表值的快捷方式的keyPath。 问题是他们使用HKCU作为根。 当HKCU被使用,而另一个用户卸载程序(因为它是为所有用户安装)的注册表项被抛在后面。 当我使用HKMU作为根我得到一个ICE57错误,但是当另一个用户卸载该程序的键被删除。 我似乎倾向于使用HKCU推虽然HKMU似乎正常行为(每用户VS所有用户)。
当我尝试创建非广告快捷方式,我得到各个ICE错误,如ICE38,ICE43,或ICE 57.我见过的建议“忽略冰错误”大多数文章。 必须有创建非标榜的快捷方式,而无需创建ICE错误的方式。
请张贴示例代码工作的例子。
如果是对不起坏礼仪回答我的问题。
最近,我偶然发现的信息DISABLEADVTSHORTCUTS财产 。 我创建通告的快捷方式的安装,并设置DISABLEADVTSHORTCUTS属性设置为1,其生产的非发布快捷方式。 这绕过ICE43错误,因为通告的快捷方式可以使用一个文件作为的keyPath。 由于DISABLEADVTSHORTCUTS已设置Windows安装程序将取代常规的快捷键,这些快捷方式做广告。
我设置了包元素的 InstallScope属性“perMachine”。 这台ALLUSERS属性设置为1的值ProgramMenuFolder和DesktopFolder然后将解析为所有用户配置文件。
对于ProgramMenuFolder下创建的文件夹有一个RemoveFolder和RegistryValue元素。 我见过的例子( EX1 , EX2 )使用HKCU作为根的RegistryValue。 我改变这根到HKMU解析为HKCU或HKLM取决于ALLUSERS的值。
总之,在安装时与DISABLEADVTSHORTCUTS设置为1个,您所宣传的快捷方式不会产生ICE错误,但将被转换成非广告快捷方式。 只要它不是对的keyPath非标榜的快捷与根HKMU一个RegistryValue是罚款一的keyPath。
<?xml version="1.0" encoding="utf-8"?>
<!-- This example is based on SampleFirst by Gábor DEÁK JAHN, Tramontána:
http://www.tramontana.co.hu/wix/lesson1.php#1.3
Original SampleFirst:
http://www.tramontana.co.hu/wix/download.php?file=samples/samplefirst.zip&type=application/zip -->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Name="Foobar 1.0" Id="YOURGUID-21F1-4026-ABD2-7CC7F8CE4D18" UpgradeCode="YOURGUID-AFA4-46C6-94AA-EEE3D104F903" Language="1033" Codepage="1252" Version="1.0.0" Manufacturer="Acme Ltd.">
<Package Id="*" Keywords="Installer" Description="Acme's Foobar 1.0 Installer" Comments="Foobar is a registered trademark of Acme Ltd." Manufacturer="Acme Ltd." InstallerVersion="100" Languages="1033" Compressed="yes" SummaryCodepage="1252" InstallScope="perMachine" />
<Media Id="1" Cabinet="Sample.cab" EmbedCab="yes" DiskPrompt="CD-ROM #1" />
<Property Id="DiskPrompt" Value="Acme's Foobar 1.0 Installation [1]" />
<Property Id="DISABLEADVTSHORTCUTS" Value="1" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="Acme" Name="Acme">
<Directory Id="INSTALLDIR" Name="Foobar 1.0">
<Component Id="MainExecutable" Guid="YOURGUID-3E4F-47A2-86F1-F3162E9C4798">
<File Id="FoobarEXE" Name="FoobarAppl10.exe" DiskId="1" Source="FoobarAppl10.exe" KeyPath="yes">
<Shortcut Id="startmenuFoobar10" Directory="ProgramMenuDir" Name="Foobar 1.0" WorkingDirectory="INSTALLDIR" Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />
<Shortcut Id="desktopFoobar10" Directory="DesktopFolder" Name="Foobar 1.0" WorkingDirectory="INSTALLDIR" Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />
</File>
</Component>
<Component Id="HelperLibrary" Guid="YOURGUID-C7DA-4C02-A2F0-A6E089FC0CF3">
<File Id="HelperDLL" Name="Helper.dll" DiskId="1" Source="Helper.dll" KeyPath="yes" />
</Component>
<Component Id="Manual" Guid="YOURGUID-FF92-4BF4-A322-819A3B2265A0">
<File Id="Manual" Name="Manual.pdf" DiskId="1" Source="Manual.pdf" KeyPath="yes">
<Shortcut Id="startmenuManual" Directory="ProgramMenuDir" Name="Instruction Manual" Advertise="yes" />
</File>
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="Foobar 1.0">
<Component Id="ProgramMenuDir" Guid="YOURGUID-D1C2-4D76-BA46-C6FA79862E77">
<RemoveFolder Id="ProgramMenuDir" On="uninstall" />
<RegistryValue Root="HKMU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" KeyPath="yes" />
</Component>
</Directory>
</Directory>
<Directory Id="DesktopFolder" Name="Desktop" />
</Directory>
<Feature Id="Complete" Level="1">
<ComponentRef Id="MainExecutable" />
<ComponentRef Id="HelperLibrary" />
<ComponentRef Id="Manual" />
<ComponentRef Id="ProgramMenuDir" />
</Feature>
<Icon Id="Foobar10.exe" SourceFile="FoobarAppl10.exe" />
</Product>
</Wix>
虽然这个职位是比较旧的它含有非常有用的信息,看起来仍然有效。 我想指出的是,一般来说,你不需要为你的快捷方式的虚拟注册表项! 据我所知,这是维克斯教程啄,而不是MSI或认证要求。 这里是一个没有REG键的示例:
<Fragment Id="Folders">
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="MyApp">
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="MyAppStartMenuDir" Name="MyApp"/>
</Directory>
</Directory>
</Fragment>
<Fragment Id="Components">
<Component Id="MyAppComp" Directory="INSTALLFOLDER" ...>
<!--The advertise flag below is to bypass ICE errors in WiX, the actual shortcut will not be advertises if those are disabled globally with DISABLEADVTSHORTCUTS-->
<File ..." KeyPath="yes">
<Shortcut Id="MyAppStartMenuLink" Directory="MyAppStartMenuDir" Advertise="yes" ... />
</File>
<RemoveFolder Id="StartMenuDirRemoved" Directory="MyAppStartMenuDir" On="uninstall" />
</Component>
</Fragment>
请注意,这将会把你的快捷方式连同可执行的一个组成部分。 如果这个困扰,那么你使用虚拟注册表项(如很好的解释接受自己的答案)。
看看从微星维克斯,10部分-快捷方式由Alex舍夫丘克。
或抢劫Menching的博客文章如何创建一个快捷方式卸载(并通过所有的ICE验证)。
基本上ICE57是相当恼人的......但这里的(似乎是工作)的代码我使用的桌面快捷键:)
<Component Id="DesktopShortcut" Directory="APPLICATIONFOLDER" Guid="*">
<RegistryValue Id="RegShortcutDesktop" Root="HKCU" Key="SOFTWARE\My App\1.0\settings" Name="DesktopSC" Value="1" Type="integer" KeyPath="yes" />
<Shortcut Id="desktopSc" Target="[APPLICATIONFOLDER]MyApp.exe" Directory="DesktopFolder" Name="My Applications" Icon="myapp.ico" IconIndex="0" WorkingDirectory="APPLICATIONFOLDER" Advertise="no"/>
<RemoveFolder Id="RemoveShortcutFolder" On="uninstall" />
<Condition>DT_SHORTCUT=1</Condition>
</Component>