2015-07-17 1 views
1

Отказ от ответственности: Я был вынужден перебросить корабль из моего любимого проверенного проекта VS Setup в WIX по требованию проекта, который, насколько мне известно, VS Setup Project не может выполнить (как описано here). Таким образом, я действительно, действительно новичок в WIX, поэтому это, вероятно, очень «вопрос».Возможно ли использовать один и тот же компонент (ярлык) в нескольких местах с помощью WIX?

Пытаясь сделать это медленно, я изучаю, как создавать ярлыки для основного исполняемого файла на рабочем столе и в меню Program Files. Я нашел, как создать компонент, и воткнул его в ComponentGroup, который будет содержать основные файлы (возможно неверное движение сразу), так это то, что я до сих пор:

<Fragment> 
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> 
     <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. --> 
     <Component Id="CMP_FooSetup"> 
      <File Id="FILE_Foo.exe" Source="$(var.Foo.TargetPath)" KeyPath="yes"/> 
     </Component> 
     <Component Id="ApplicationShortcut"> 
      <Shortcut 
       Id="FooShortcut" 
       Name="Foo" 
       Description="Foos your Bar." 
       Target="[#FILE_Foo.exe]" 
       WorkingDirectory="APPLICATIONROOTDIRECTORY"/> 
      <RegistryValue 
       Root="HKCU" 
       Key="Software\FooCompany\Foo" 
       Name="installed" Type="integer" Value="1" 
       KeyPath="yes"/> 
      <RemoveFile Id="RemoveFooShortcut" Name="Foo.lnk" On="uninstall"/> 
     </Component> 
    </ComponentGroup> 

Я хочу один ярлык для перехода на рабочий стол, а другой - в ярлык меню программы. С этой целью я определил следующие структуры папок:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramMenuFolder"> 
     <Directory Id="ApplicationProgramsFolder" Name="FooBar"> 
      <!--This is where a shortcut should be placed. How? --> 
     </Directory> 
    </Directory> 
    <Directory Id="DesktopFolder"> 
     <!--This is where a shortcut should be placed. How? --> 
    </Directory> 
    <Directory Id="ProgramFilesFolder"> 
     <Directory Id="INSTALLPARENT" Name="FooBar"> 
      <Directory Id="INSTALLFOLDER" Name="Foo"/> 
     </Directory> 
    </Directory> 
</Directory> 

Все в моих костях и опыт работы в качестве программиста (ограниченного, хотя это может быть) кричит «Эй, я должен быть в состоянии использовать идентификатор Компонент ярлыка в структурах каталогов, чтобы проинструктировать установщика о создании этих ярлыков! », Но я не знаю, как это сделать. Похоже, он должен быть довольно рудиментарным, но мой поиск ничего не изменил.

Возможно ли это? Если так; как? Если не; что я должен сделать, чтобы сделать эту работу?

Пожалуйста, будьте добры ...

+0

Отвечая на вопрос название для точки зрения, компонент является членом одной _or more_ Особенности. –

ответ

1

Это не представляется возможным использовать компонент в нескольких местах (каталоги). Альтернативой является создание нескольких компонентов, перемещающих атрибут Directory из ComponentGroup в тег Component.

<ComponentGroup Id="ProductComponents"> 
    <Component Id="CMP_FooSetup" Directory="INSTALLFOLDER"> 
     <File Id="FILE_Foo.exe" Source="$(var.Foo.TargetPath)" KeyPath="yes"/> 
    </Component> 
    <Component Id="ApplicationShortcut" Directory="INSTALLFOLDER"> 
     <Shortcut 
      Id="FooShortcut" 
      Name="Foo" 
      Description="Foos your Bar." 
      Target="[#FILE_Foo.exe]" 
      WorkingDirectory="APPLICATIONROOTDIRECTORY"/> 
     <RegistryValue 
      Root="HKCU" 
      Key="Software\FooCompany\Foo" 
      Name="installed" Type="integer" Value="1" 
      KeyPath="yes"/> 
     <RemoveFile Id="RemoveFooShortcut" Name="Foo.lnk" On="uninstall"/> 
    </Component> 
    <!-- Here I added the Directory attrib and changed the Id. --> 
    <Component Id="DesktopShortcut" Directory="DesktopFolder"> 
     <Shortcut 
      <!-- New Id --> 
      Id="FooShortcutDesktop" 
      Name="Foo" 
      Description="Foos your Bar." 
      Target="[#FILE_Foo.exe]" 
      WorkingDirectory="APPLICATIONROOTDIRECTORY"/> 
     <RegistryValue 
      Root="HKCU" 
      Key="Software\FooCompany\Foo" 
      <!-- New Name --> 
      Name="installed_desktop" Type="integer" Value="1" 
      KeyPath="yes"/> 
     <!-- New Id --> 
     <RemoveFile Id="RemoveFooShortcutDesktop" Name="Foo.lnk" On="uninstall"/> 
    </Component> 
</ComponentGroup> 

Как вы спросили, можно изменить WXS включить компонент внутри Directory тега, например:

... 
<Directory Id="DesktopFolder"> 
    <Component> 
     <Shortcut ... /> 
    </Component> 
</Directory> 
... 
+0

Uhg; Благодарю. Это не тот ответ, который я хотел, но я заставлю его работать ... – Will

+0

Тогда я надеюсь, что мое редактирование ответит на ваш вопрос более прямым образом. :) Благодаря! – Marlos

Смежные вопросы