[wix] Wix는 모든 사용자 / 컴퓨터 당 광고되지 않은 바로 가기 생성

WIX에서 allusers 프로필에 광고되지 않은 바로 가기를 만드는 방법은 무엇입니까? 지금까지 광고 된 바로 가기로 만이 작업을 수행 할 수있었습니다. 바로 가기의 속성으로 이동하여 “대상 찾기”를 사용할 수 있으므로 광고되지 않은 바로 가기를 선호합니다.

자습서에서 바로 가기의 키 경로에 레지스트리 값을 사용하는 것을 보았습니다. 문제는 HKCU를 루트로 사용한다는 것입니다. HKCU를 사용하고 다른 사용자가 프로그램을 제거하면 (모든 사용자 용으로 설치되었으므로) 레지스트리 키가 남습니다. HKMU를 루트로 사용하면 ICE57 오류가 발생하지만 다른 사용자가 프로그램을 제거하면 키가 제거됩니다. HKMU가 올바르게 작동하는 것처럼 보이지만 HKCU를 사용하는쪽으로 밀려 난 것 같습니다 (사용자 별 대 모든 사용자).

광고되지 않은 바로 가기를 만들려고 할 때 ICE38, ICE43 또는 ICE 57과 같은 다양한 ICE 오류가 발생합니다. 내가 본 대부분의 기사는 “얼음 오류를 무시하십시오”를 권장합니다. ICE 오류를 생성하지 않고 광고되지 않은 바로 가기를 생성하는 방법이 있어야합니다.

작동하는 예제에 대한 샘플 코드를 게시하십시오.



답변

내 질문에 대답하는 것이 나쁜 에티켓이라면 미안합니다.

최근에 DISABLEADVTSHORTCUTS 속성 에 대한 정보를 발견했습니다 . 광고 된 바로 가기를 사용하여 설치를 만들고 DISABLEADVTSHORTCUTS 속성을 1로 설정하여 광고되지 않은 바로 가기를 생성했습니다. 이는 공지 된 바로 가기가 파일을 키 경로로 사용할 수 있기 때문에 ICE43 오류를 우회합니다 . DISABLEADVTSHORTCUTS가 설정 되었기 때문에 Windows Installer는 이러한 광고 된 바로 가기를 일반 바로 가기로 바꿉니다.

나는 설정 패키지 요소의 “perMachine”에 InstallScope 속성을. 그러면 ALLUSERS 속성이 1로 설정됩니다. 그러면 ProgramMenuFolderDesktopFolder 의 값이 모든 사용자 프로필로 확인됩니다.

ProgramMenuFolder 아래에 생성 된 폴더의 경우 RemoveFolder 및 RegistryValue 요소가 있습니다. 내가 본 예제 ( ex1 , ex2 )는 HKCU를 RegistryValue의 루트로 사용합니다. 이 루트를 ALLUSERS의 값에 따라 HKCU 또는 HKLM 으로 확인 하는 HKMU로 변경했습니다 .

간단히 말해, DISABLEADVTSHORTCUTS를 1로 설정하면 보급 된 바로 가기가 ICE 오류를 생성하지 않지만 설치시 보급되지 않은 바로 가기로 변환됩니다. 루트 HKMU가있는 RegistryValue는 광고되지 않은 바로 가기의 키 경로가 아닌 한 KeyPath에 적합합니다.

<?xml version="1.0" encoding="utf-8"?>
<!-- This example is based on SampleFirst by Gábor DEÁK JAHN, Tramontána:
        http://www.tramontana.co.hu/wix/lesson1.php#1.3
    Original SampleFirst:
        http://www.tramontana.co.hu/wix/download.php?file=samples/samplefirst.zip&type=application/zip -->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Name="Foobar 1.0" Id="YOURGUID-21F1-4026-ABD2-7CC7F8CE4D18" UpgradeCode="YOURGUID-AFA4-46C6-94AA-EEE3D104F903" Language="1033" Codepage="1252" Version="1.0.0" Manufacturer="Acme Ltd.">
        <Package Id="*" Keywords="Installer" Description="Acme's Foobar 1.0 Installer" Comments="Foobar is a registered trademark of Acme Ltd." Manufacturer="Acme Ltd." InstallerVersion="100" Languages="1033" Compressed="yes" SummaryCodepage="1252" InstallScope="perMachine" />
        <Media Id="1" Cabinet="Sample.cab" EmbedCab="yes" DiskPrompt="CD-ROM #1" />
        <Property Id="DiskPrompt" Value="Acme's Foobar 1.0 Installation [1]" />
        <Property Id="DISABLEADVTSHORTCUTS" Value="1" />
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder" Name="PFiles">
                <Directory Id="Acme" Name="Acme">
                    <Directory Id="INSTALLDIR" Name="Foobar 1.0">
                        <Component Id="MainExecutable" Guid="YOURGUID-3E4F-47A2-86F1-F3162E9C4798">
                            <File Id="FoobarEXE" Name="FoobarAppl10.exe" DiskId="1" Source="FoobarAppl10.exe" KeyPath="yes">
                                <Shortcut Id="startmenuFoobar10" Directory="ProgramMenuDir" Name="Foobar 1.0" WorkingDirectory="INSTALLDIR" Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />
                                <Shortcut Id="desktopFoobar10" Directory="DesktopFolder" Name="Foobar 1.0" WorkingDirectory="INSTALLDIR" Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />
                            </File>
                        </Component>
                        <Component Id="HelperLibrary" Guid="YOURGUID-C7DA-4C02-A2F0-A6E089FC0CF3">
                            <File Id="HelperDLL" Name="Helper.dll" DiskId="1" Source="Helper.dll" KeyPath="yes" />
                        </Component>
                        <Component Id="Manual" Guid="YOURGUID-FF92-4BF4-A322-819A3B2265A0">
                            <File Id="Manual" Name="Manual.pdf" DiskId="1" Source="Manual.pdf" KeyPath="yes">
                                <Shortcut Id="startmenuManual" Directory="ProgramMenuDir" Name="Instruction Manual" Advertise="yes" />
                            </File>
                        </Component>
                    </Directory>
                </Directory>
            </Directory>
            <Directory Id="ProgramMenuFolder" Name="Programs">
                <Directory Id="ProgramMenuDir" Name="Foobar 1.0">
                    <Component Id="ProgramMenuDir" Guid="YOURGUID-D1C2-4D76-BA46-C6FA79862E77">
                        <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
                        <RegistryValue Root="HKMU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" KeyPath="yes" />
                    </Component>
                </Directory>
            </Directory>
            <Directory Id="DesktopFolder" Name="Desktop" />
        </Directory>
        <Feature Id="Complete" Level="1">
            <ComponentRef Id="MainExecutable" />
            <ComponentRef Id="HelperLibrary" />
            <ComponentRef Id="Manual" />
            <ComponentRef Id="ProgramMenuDir" />
        </Feature>
        <Icon Id="Foobar10.exe" SourceFile="FoobarAppl10.exe" />
    </Product>
</Wix>


답변

이 게시물은 다소 오래되었지만 매우 유용한 정보를 포함하고 있으며 여전히 활성화되어 있습니다. 일반적으로 바로 가기에 더미 레지스트리 키가 필요하지 않다는 점을 지적하고 싶습니다! AFAIK 이것은 WiX 자습서이며 MSI 또는 인증 요구 사항이 아닙니다. 다음은 reg 키가없는 예입니다.

<Fragment Id="Folders">
  <Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFilesFolder">
      <Directory Id="INSTALLFOLDER" Name="MyApp">
      </Directory>
    </Directory>
    <Directory Id="ProgramMenuFolder">
      <Directory Id="MyAppStartMenuDir" Name="MyApp"/>
    </Directory>
  </Directory>
</Fragment>
<Fragment Id="Components">
  <Component Id="MyAppComp" Directory="INSTALLFOLDER" ...>
    <!--The advertise flag below is to bypass ICE errors in WiX, the actual shortcut will not be advertises if those are disabled globally with DISABLEADVTSHORTCUTS-->
    <File ..." KeyPath="yes">
      <Shortcut Id="MyAppStartMenuLink" Directory="MyAppStartMenuDir" Advertise="yes" ... />
    </File>
    <RemoveFolder Id="StartMenuDirRemoved" Directory="MyAppStartMenuDir" On="uninstall" />
  </Component>
</Fragment>

이렇게하면 바로 가기와 실행 파일이 하나의 구성 요소에 포함됩니다. 이것이 신경 쓰이는 경우 더미 레지스트리 키를 사용하십시오 (잘 설명 된 자체 답변에서와 같이).


답변

From MSI to WiX, Part 10-Shortcuts by Alex Shevchuk 살펴보세요 .

또는 Rob Menching의 블로그 게시물 How to create an uninstall shortcut (and pass all ICE validation).

기본적으로 ICE57은 다소 짜증이납니다 …하지만 여기에 데스크탑 바로 가기에 사용하는 코드가 있습니다.

<Component Id="DesktopShortcut" Directory="APPLICATIONFOLDER" Guid="*">
    <RegistryValue Id="RegShortcutDesktop" Root="HKCU" Key="SOFTWARE\My App\1.0\settings" Name="DesktopSC" Value="1" Type="integer" KeyPath="yes" />
    <Shortcut Id="desktopSc" Target="[APPLICATIONFOLDER]MyApp.exe" Directory="DesktopFolder" Name="My Applications" Icon="myapp.ico" IconIndex="0" WorkingDirectory="APPLICATIONFOLDER" Advertise="no"/>
    <RemoveFolder Id="RemoveShortcutFolder" On="uninstall" />
    <Condition>DT_SHORTCUT=1</Condition>
</Component>


답변