24

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' はディレクトリ: 'DesktopFolder' です。ディレクトリ/コンポーネントのペアは、CreateFolders テーブルにリストされている必要があります。
ICE38:コンポーネント DesktopShortcut がユーザー プロファイルにインストールされます。ファイルではなく、HKCU の下のレジストリ キーを KeyPath として使用する必要があります。
ICE43:コンポーネントの DesktopShortcut に非公開のショートカットがあります。ファイルではなく、HKCU の下のレジストリ キーを KeyPath として使用する必要があります。

WiX 3 / Windows インストーラーがここで何を伝えようとしているのか理解できません....誰か??

AppShortcutとの両方のコンポーネントDesktopShortcutは、実際には「メイン」機能の一部です。問題はありません。ここでいったい何が間違っているのかわかりません....

更新: OK、デスクトップ ショートカットにいくつかのレジストリ キーを追加しました

<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 では失敗し続けます :-( 何かアイデアはありますか??

4

5 に答える 5

20

これは、ライブプロダクションコードからの実際の例です...

<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>
于 2010-06-20T23:44:28.213 に答える
11

これは @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>

Product element次に、このフラグメントは、次のように に含める必要があることに注意してください。

<Feature Id="ProductFeature" Title="Your Application Title" Level="1">
    ...
    <ComponentRef Id="DesktopShortcut" />
</Feature>

にはProductFeature、ファイルやプログラム メニューのショートカット フラグメントなど、他のフラグメントが含まれている可能性があります。

また、次のDesktopFolderように、 に参照が必要TARGETDIR directory elementになります (必要に応じて、他のフォルダーが含まれている可能性が非常に高くなりますProgramMenuFolder)。

<Directory Id="TARGETDIR" Name="SourceDir">
    ...
    <Directory Id="DesktopFolder" Name="Desktop"/>
</Directory>
于 2013-10-14T16:55:38.033 に答える
7

これらの各ICEメッセージは、基本的に同じことについて不平を言っています。ショートカットをインストールするコンポーネントには、そのキーパスとしてレジストリ エントリが必要です。これを修正するには、次のようなものをコンポーネントに追加します。

<RegistryValue Root="HKCU" Key="Software\MyCompany\MyApplicationName" 
    Name="desktopShortcut" Type="integer" Value="1" KeyPath="yes"/>

スタート メニューのショートカットをインストールするコンポーネントについても同様です。ショートカットの作成については、関連するWix ドキュメント サンプルをご覧ください

于 2010-06-19T20:56:20.460 に答える
2

私の目的は、インターネット ショートカット リンクを作成し、デスクトップに配置することです。これが私のために働くコードです:

<?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="09F1B63D-FB03-43FD-A326-FD49F93D00C8" Name="TestProduct" Language="1033" Version="0.0.0.1" Manufacturer="WixEdit" UpgradeCode="6B2F9AB4-73A6-45CB-9EC4-590D1AAA6779">
        <Package Description="Test file in a Product" Comments="Simple test" InstallerVersion="200" Compressed="yes" />
        <Media Id="1" Cabinet="simple.cab" EmbedCab="yes" />
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder" Name="PFiles">
                <Directory Name="AAAA" Id="AAABBB">
                    <Component Id="AAAA">
                        <File Id="AAAA.EXE" Name="AAAA.exe" Source="U:\web\bin\x86\Release\AAAA.exe" />
                    </Component>
                </Directory>
            </Directory>
            <Directory Id="DesktopFolder">
                    <Component Id="StartMenuShortcuts" Guid="E8EDD7BC-9762-4C3D-8341-FAEC983D318A">
                        <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
                        <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" />
                        <util:InternetShortcut Id="WebsiteShortcut" Name="AAAA Website" Target="http://www.AAAA.com" />
                    </Component>
            </Directory>
        </Directory>
        <Feature Id="DefaultFeature" Title="Main Feature" Level="1">
            <ComponentRef Id="StartMenuShortcuts" />
            <ComponentRef Id="AAAA" />
        </Feature>
        <UI />
    </Product>
</Wix>

注:キャンドルライトのコマンドラインに以下を追加する必要があります: -ext WiXUtilExtension

于 2011-12-05T08:02:03.587 に答える