WiX 3让我疯狂 - 试图创建桌面快捷方式

mar*_*c_s 22 wix wix3 desktop-shortcut

我有一个正在安装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>
Run Code Online (Sandbox Code Playgroud)

我一直遇到的错误是:

ICE18:组件的KeyPath:'DesktopShortcut'是目录:'DesktopFolder'.目录/组件对必须在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>
Run Code Online (Sandbox Code Playgroud)

现在ICE消息消失了,但是当我尝试安装应用程序时,我得到错误1909 - 目标文件夹不存在,或者您没有写入权限(或类似的东西)

更新2:上面提供的示例代码可以在Win XP上运行,但它在Win Server 2003上仍然失败:-(任何进一步的想法?

sas*_*ont 18

这是我们的实时生产代码中的一个工作示例......

<Fragment>
    <Component Id="DesktopShortcut" Directory="APPLICATIONFOLDER" Guid="*">
        <RegistryValue Id="RegShortcutDesktop" Root="HKCU" 
                Key="SOFTWARE\ACME\settings" Name="DesktopSC" Value="1" 
                Type="integer" KeyPath="yes" />
        <Shortcut Id="desktopSC" Target="[APPLICATIONFOLDER]MyApp.exe"
                Directory="DesktopFolder" Name="My Application" 
                Icon="$(var.product).ico" IconIndex="0"
                WorkingDirectory="APPLICATIONFOLDER" Advertise="no"/>
    </Component>
</Fragment>
Run Code Online (Sandbox Code Playgroud)

  • 你真的创建了一个名为My application的应用程序吗? (4认同)

noe*_*cus 7

这是基于@ saschabeaumont的答案,但希望为我们的WiX初学者提供一些额外的有用提示(这是每个人学习的噩梦???).

首先,创建一个包含快捷方式详细信息的片段:

<Fragment>
<Component Id="DesktopShortcut" Directory="INSTALLFOLDER" Guid="*">
    <RegistryValue Id="RegShortcutDesktop" 
            Root="HKCU" 
            Key="Software\Company\ApplicationName"
            Name="DesktopSC"
            Value="1" 
            Type="integer"
            KeyPath="yes" />

    <Shortcut Id="desktopSC" 
            Target="[INSTALLFOLDER]ApplicationName.exe"
            WorkingDirectory="INSTALLFOLDER"
            Icon="icon.ico"
            Directory="DesktopFolder" 
            Name="ApplicationName" 
            Advertise="no"/>
</Component>
</Fragment>
Run Code Online (Sandbox Code Playgroud)

接下来,请注意这个片段需要包括在内Product element,如下所示:

<Feature Id="ProductFeature" Title="Your Application Title" Level="1">
    ...
    <ComponentRef Id="DesktopShortcut" />
</Feature>
Run Code Online (Sandbox Code Playgroud)

ProductFeature可能会包含其他片段,如文件,程序菜单快捷方式片段.

此外,DesktopFolder将需要一个引用TARGETDIR directory element(很可能包含其他文件夹,如ProgramMenuFolder您所需),如下所示:

<Directory Id="TARGETDIR" Name="SourceDir">
    ...
    <Directory Id="DesktopFolder" Name="Desktop"/>
</Directory>
Run Code Online (Sandbox Code Playgroud)

  • 如果您希望快捷方式位于"所有用户配置文件"中,设置ALLUSERS = 1并在快捷方式中使用HKLM作为root,该怎么办?ICE57 (2认同)

Wim*_*nen 6

这些ICE消息中的每一个基本上都在抱怨同样的事情:安装快捷方式的组件应该有一个注册表项作为其keypath.要解决此问题,请将以下内容添加到组件中:

<RegistryValue Root="HKCU" Key="Software\MyCompany\MyApplicationName" 
    Name="desktopShortcut" Type="integer" Value="1" KeyPath="yes"/>
Run Code Online (Sandbox Code Playgroud)

安装开始菜单快捷方式的组件也是如此.查看有关创建快捷方式的相关wix文档示例.