我有一个使用WiX 3进行安装的应用程序 - 目前大部分安装都工作正常,但尝试使桌面快捷方式工作似乎让我失去了理智...
我的应用程序已经安装并且我已经在“开始菜单”文件夹中创建了一个快捷方式 - 运行得很好。但是如何让桌面快捷方式能够工作呢?
<Product Id="*" Name="....." UpgradeCode="MY-GUID">
<Package Id="*" InstallerVersion="200" Compressed="yes" />
<Media Id="1" Cabinet="foobar.cab" EmbedCab="yes" />
<Property Id="ALLUSERS">1</Property>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="FooBar"/>
</Directory>
<Directory Id="DesktopFolder" SourceName="Desktop"/>
<Directory Id="ProgramFilesFolder">
<Directory Id="FoobarDir" Name="FOOBAR">
<Directory Id="INSTALLLOCATION" Name="FooApp">
<Component Id="MainFiles" Guid=".....">
<File Id="FooMainApp" Source="FooMainApp.exe" />
</Component>
</Directory>
</Directory>
</Directory>
</Directory>
....
<!-- this shortcut here works just fine ... -->
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="AppShortcut" Guid="...">
<Shortcut Id="ApplicationStartMenuShortcut"
Name="FooBarApp" Description="..."
Target="[INSTALLLOCATION]FooMainApp.exe"
WorkingDirectory="INSTALLLOCATION"/>
</Component>
</DirectoryRef>
<!-- but this shortcut here never seems to work .. ... -->
<DirectoryRef Id="DesktopFolder">
<Component Id="DesktopShortcut" Guid="....." >
<Shortcut Id="DesktopAppShortcut"
Advertise="no"
Name="FooBarApp" Description="...."
Target="[INSTALLLOCATION]FooMainApp.exe"
WorkingDirectory="INSTALLLOCATION"/>
</Component>
</DirectoryRef>
我一直收到的错误是:
ICE18: 组件 DesktopShortcut 的 KeyPath 是 Directory:DesktopFolder。Directory/Component 对必须在 CreateFolders 表中列出。
ICE38: 组件 DesktopShortcut 安装到用户配置文件中。它必须使用 HKCU 下的注册表键作为其 KeyPath,而不是文件。
ICE43: 组件 DesktopShortcut 具有非广告快捷方式。它应该使用 HKCU 下的注册表键作为其 KeyPath,而不是文件。
我不明白WiX 3 / Windows Installer到底在告诉我什么.... 有人能解释一下吗?
AppShortcut
和 DesktopShortcut
这两个组件实际上都是“主”功能的一部分 - 我看不出有任何问题。我无法想象这里可能出了什么问题....
更新: 好的,我给我的桌面快捷方式添加了一些注册表键内容。
<Component Id="DesktopShortcut" Guid="BF3587B4-F52E-411E-8814-CFCBF8201C0D">
<RegistryKey Root="HKCU" Key="Software\Foo Inc\FooBarApp\Installed"
Action="createAndRemoveOnUninstall">
<RegistryValue Name="DTSC" Value="1" Type="integer" KeyPath="yes"/>
</RegistryKey>
<Shortcut Id="DesktopShortcut" Directory="DesktopFolder"
Name="FooBar" WorkingDirectory="INSTALLLOCATION"
Icon="foobar.ico"
Target="[INSTALLOCATION]FooMainApp.exe"/>
</Component>
现在 ICE 消息已经消失了,但是当我尝试安装该应用程序时,我收到错误 1909 - 目标文件夹不存在或者您没有写入权限(或类似的情况)
更新2:上面提供的示例代码在 Win XP 上可以工作,但在 Win Server 2003 上一直失败 :-( 是否有更进一步的想法?