2010-06-19 7 views
21

WiX 3와 함께 설치되는 앱이 있습니다. 대부분 설치가 정상적으로 작동하지만 바탕 화면 바로 가기를 사용하려고하면 내 마음이들 것 같습니다. ...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 : 구성 요소에 대한 키 패스는 : 'DesktopFolder' 'DesktopShortcut'디렉토리입니다. 디렉토리/구성 요소 쌍은 CreateFolders 테이블에 이어야합니다.
ICE38 : 구성 요소 DesktopShortcut 은 사용자 프로필에 설치됩니다. 파일이 아닌 KeyPath로 HKCU에서 레지스트리 키를 사용해야합니다.
ICE43 : 구성 요소 DesktopShortcut에는 비공개 바로 가기가 있습니다. 파일이 아니라 KeyPath로 HKCU에서 레지스트리 키를 사용해야합니다.

지구상에 WiX 3/Windows Installer가 무엇을 말하려고하는지 이해하지 못합니다 .... 누구?

두 구성 요소, AppShortcutDesktopShortcut은 사실 "주요"기능의 일부입니다. 문제는 없습니다.이 좋아, 그래서 내 바탕 화면 바로 가기에 일부 레지스트리 키 물건을 추가 해주기

<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> 

얼음 메시지는 다음과 같습니다 : 나는

업데이트 .... 여기에서 잘못 될 수 지구상에서 무엇을 알아낼 수 없습니다 사라졌지만 앱을 설치하려고 할 때 오류 1909가 발생합니다. 대상 폴더가 없거나 쓰기 권한이 없습니다.

업데이트 2 : 위의 예제 코드는 Win XP에서 작동하지만 Windows Server 2003에서는 계속 실패합니다. - (더 이상의 아이디어?

+0

이 문제는 나를 미치게 만들었다! 그리고 여전히 정신 나간 ... Windows 7에서 작동하도록해야하기 때문에 –

답변

17

여기

<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> 
+0

OK, 샘플 용 탱크 - Win XP 클라이언트에서는 나에게 적합하지만 Windows Server 2003 서버에서는 작동하지 않습니다 :-( –

+0

흠, 꽤 이상하게 보입니다. 32/64bit를 비교하라는 제안? 로밍 프로필 또는 로컬? 콘솔에서는 작동하지만 원격 데스크탑에서는 작동하지 않습니다. ? – saschabeaumont

+0

내 Win2003 서버는 VMWare VM의 32 비트 버전이며, WinXP 테스트 머신 (VM)과 동일합니다. 어쨌든 - 지금은 XP에서만 필요하므로 문제가 해결됩니다 - 감사합니다! –

6

이러한 각 ICE 메시지는 기본적으로 동일한 것에 대해 불평하고 있습니다. 바로 가기를 설치하는 구성 요소는 레지스트리 항목이 keypath이어야합니다. 이 문제를 해결하려면 다음과 같이 구성 요소에 다음을 추가하십시오.

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

시작 메뉴 바로 가기를 설치하는 구성 요소도 마찬가지입니다. 관련 wix documentation sample about creating a shortcut을 살펴보십시오.

+0

재미있는 점은 앱 메뉴 바로 가기가 완벽하게 작동한다는 것입니다. 레지스트리 키가 필요하지 않습니다. 바로 바탕 화면 바로 가기가 나타나지 않습니다 :-( –

+0

Windows XP에서는 제대로 작동하지만 오류 1909로 실패합니다 - Windows Server 2003에서 바로 가기 링크를 만들 수 없습니다 ....... –

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이 있다면

0

확실하지 않음 가능한 2010 년 다시, 그러나 이것은 내가 윅스 3.7에서 그것을 할 방법은 다음과 같습니다

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="DesktopFolder" SourceName="Desktop" /> 
    <Directory Id="MergeRedirectFolder"> 
    <Component Id="MyExeComponent" Guid="{PUT-GUID-HERE}"> 
     <File Id="MyExeFile" Source="$(var.ExeSourcePath)" KeyPath="yes"> 
     <Shortcut 
      Id="DesktopShortcut" 
      Directory="DesktopFolder" 
      Name="$(var.ShortcutName)" 
      WorkingDirectory="MergeRedirectFolder" /> 
     </File> 
    </Component> 
    </Directory> 
</Directory> 
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> 

다음,이 조각이처럼 Product element에 포함해야한다는 점에 유의하십시오

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

ProductFeature 가능성이 것입니다 파일과 같은 다른 단편과 프로그램 메뉴 단축키 단편을 포함합니다.

또한, DesktopFolder는 다음과 같이, (매우 가능성이 다른 폴더가 포함됩니다, 같은 ProgramMenuFolder 필요한대로) TARGETDIR directory element의 참조가 필요합니다

<Directory Id="TARGETDIR" Name="SourceDir"> 
    ... 
    <Directory Id="DesktopFolder" Name="Desktop"/> 
</Directory> 
+2

바로 가기를 모든 사용자 프로필에 포함 하시겠습니까? ALLUSERS = 1로 설정하고 바로 가기에서 루트에 HKLM을 사용하면 실패합니다. ICE57 – neslekkiM