2016-10-16 8 views
1

私は実行ファイルといくつかのdllをインストールするシンプルなwixセットアップを持っています。デスクトップのショートカットは、C:\ Program Filesの実行ファイルへの通常のリンクではなく、実行可能な場所を隠している奇妙なregistry-guidタイプのリンクを除いて、すべてが機能します。その上に、このショートカットのアイコンは、実行ファイルそのもののアイコンではなく、インストーラフォルダから来ています。WIXの壊れたショートカットアイコン

この素敵なショートカットではなく、c:\ program files \ mycompany \ myproduct.exeにショートカットを作成するにはどうすればよいですか?

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="*" Name="MyProduct" Language="1033" Version="1.0.0.0" Manufacturer="MyCompany" UpgradeCode="11111111-1111-1111-1111-111111111111"> 
     <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> 

     <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
     <MediaTemplate EmbedCab="yes" /> 

     <Feature Id="ProductFeature" Title="MyCompany.Desktop.Setup" Level="1"> 
      <ComponentGroupRef Id="ProductComponents" /> 
      <ComponentRef Id='ProgramMenuDir' /> 
     </Feature> 
     <Icon Id="MyProduct.ico" SourceFile="MyProduct.ico" /> 

     <UI> 
      <UIRef Id="WixUI_Minimal" /> 
      <Publish Dialog="ExitDialog" 
       Control="Finish" 
       Event="DoAction" 
       Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish> 
     </UI> 
     <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Open MyProduct now" /> 
     <Property Id="WIXUI_EXITDIALOGOPTIONALTEXT" Value="Success! MyProduct is now installed." /> 

     <CustomAction Id="CA_Set_WIXUI_EXITDIALOGOPTIONALTEXT" Property="WIXUI_EXITDIALOGOPTIONALTEXT" Value="Oops! Unfortunately, the installer ran into a problem and MyProduct was not installed."/> 
     <InstallUISequence> 
      <Custom Action="CA_Set_WIXUI_EXITDIALOGOPTIONALTEXT" After="FindRelatedProducts">Installed</Custom> 
     </InstallUISequence> 

     <Property Id="WixShellExecTarget" Value="[#MyProductEXE]" /> 
     <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" /> 
    </Product> 

    <Fragment> 
     <Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder"> 
       <Directory Id="INSTALLFOLDER" Name="MyProduct"> 
       </Directory> 
      </Directory> 

      <Directory Id="ProgramMenuFolder" Name="Programs"> 
       <Directory Id="ProgramMenuDir" Name="MyProduct"> 
        <Component Id="ProgramMenuDir"> 
         <RemoveFolder Id='ProgramMenuDir' On='uninstall' /> 
         <RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' /> 
        </Component> 
       </Directory> 
      </Directory> 

      <Directory Id="DesktopFolder" Name="Desktop" /> 
     </Directory> 
    </Fragment> 

    <Fragment> 
     <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> 
      <Component Id="MainExecutable"> 
       <File Id='MyProductEXE' Source='$(var.MyCompany.Desktop.TargetPath)' KeyPath='yes'> 
        <Shortcut Id="startmenuMyProduct" Directory="ProgramMenuDir" Name="MyProduct" WorkingDirectory='INSTALLDIR' Icon="MyProduct.ico" IconIndex="0" Advertise="yes" /> 
        <Shortcut Id="desktopMyProduct" Directory="DesktopFolder" Name="MyProduct" Description="MyProduct Description" WorkingDirectory='INSTALLDIR' Icon="MyProduct.ico" IconIndex="0" Advertise="yes" /> 
       </File> 
      </Component> 
      <Component Id='CommonLibrary'> 
       <File Id='CommonDLL' Source='$(var.MyCompany.Desktop.TargetDir)\MyCompany.Common.dll' KeyPath='yes' /> 
      </Component> 
      <Component Id='CSVLibrary'> 
       <File Id='CSVDLL' Source='$(var.MyCompany.Desktop.TargetDir)\CsvHelper.dll' KeyPath='yes' /> 
      </Component> 
      <Component Id='InputLibrary'> 
       <File Id='WinInpDLL' Source='$(var.MyCompany.Desktop.TargetDir)\WindowsInput.dll' KeyPath='yes' /> 
      </Component> 
     </ComponentGroup> 
    </Fragment> 
    <Fragment> 
     <Component Id="DesktopShortcut" Directory="APPLICATIONFOLDER" Guid="*"> 
      <RegistryValue Id="RegShortcutDesktop" Root="HKCU" 
        Key="Software\[Manufacturer]\[ProductName]" Name="DesktopSC" Value="1" 
        Type="integer" KeyPath="yes" /> 
      <Shortcut Id="desktopSC" Target="[APPLICATIONFOLDER]MyCompany.Desktop.exe" 
        Directory="DesktopFolder" Name="MyProduct" 
        Icon="MyProduct.ico" IconIndex="0" 
        WorkingDirectory="APPLICATIONFOLDER" Advertise="no"/> 
     </Component> 
    </Fragment> 
</Wix> 

答えて

2

DesktopShortcutコンポーネントへのコンポーネント参照は、製品機能にはありません。あなたのProductFeatureは次のようになります。

<Feature Id="ProductFeature" Title="MyCompany.Desktop.Setup" Level="1"> 
     <ComponentGroupRef Id="ProductComponents" /> 
     <ComponentRef Id='ProgramMenuDir' /> 
     <ComponentRef Id='DesktopShortcut' /> 
    </Feature> 

はこれにあなたのDesktopShortcutコンポーネントを変更します。あなたのアプリケーションに平野、古いとシンプルなデスクトップのショートカットを与える必要があります

<!--DesktopShortcut--> 
<DirectoryRef Id="DesktopFolder"> 
    <Component Id="DesktopShortcut" 
      Guid="GENERATE A GUID FOR THIS COMPONENT"> 

    <Shortcut Id="desktopSC" 
       Name="MyProduct" 
       Description="MyProduct description" 
       Target="[APPLICATIONFOLDER]MyCompany.Desktop.exe" 
       Icon="MyProduct.ico"> 
    </Shortcut> 
    <RemoveFolder Id="RemoveDesktopFolder" 
        Directory="DesktopFolder" 
        On="uninstall" /> 
    <RegistryValue Root="HKCU" 
        Key="Software\[Manufacturer]\[ProductName]" 
        Name="installed" 
        Type="integer" 
        Value="1" 
        KeyPath="yes" /> 
    </Component> 
</DirectoryRef> 

。 言及する価値がある点:

  • RemoveFolderタグが追加されました。これにより、アプリケーションのアンインストール時にデスクトップショートカットも削除されます。
  • DesktopShortcutコンポーネントのGUIDを変更しないでください。これにより、インストール/アンインストール中のファイルの一貫性と管理性が保証されます。
  • DesktopShortcutコンポーネントの周りにラップされたデスクトップフォルダへのディレクトリ参照があることに注目してください。これは、ショートカットが適切な場所に置かれていることを確認します。 この場合、デスクトップ。