Wix create non advertised shortcut for all users / per machine

W WIX, jak utworzyć Nie reklamowany skrót w profilu allusers? Do tej pory udało mi się to osiągnąć tylko za pomocą reklamowanych skrótów. Wolę nie reklamowane skróty, ponieważ możesz przejść do właściwości skrótu i użyć "Znajdź cel".

W samouczkach widziałem użycie wartości rejestru dla ścieżki klawiatury skrótu. Problem w tym, że używają HKCU jako korzenia. Gdy HKCU jest używany, a inny użytkownik odinstalowuje program (ponieważ jest zainstalowany dla wszystkich użytkowników) klucz rejestru pozostaje w tyle. Kiedy używam HKMU jako root dostaję błąd ICE57, ale klucz jest usuwany, gdy inny użytkownik odinstaluje program. Wydaje się być popychany do korzystania z HKCU choć HKMU wydaje się zachowywać poprawnie (per-user vs all-users).

Kiedy próbuję stworzyć nie reklamowany Skrót, dostaję różne błędy ICE, takie jak ICE38, ICE43 lub ICE 57. Większość artykułów, które widziałem, zaleca "po prostu ignoruj błędy lodu". Musi być sposób na stworzenie nie reklamowanych skrótów, bez tworzenia błędów lodu.

Proszę podać przykładowy kod dla przykładu roboczego.

Author: mcdon, 2010-01-13

3 answers

Przepraszam, jeśli to zła Etykieta, by odpowiedzieć na moje pytanie.

Ostatnio natknąłem się na informacje o właściwości DISABLEADVTSHORTCUTS. Utworzyłem instalację z reklamowanymi skrótami i ustawiłem właściwość DISABLEADVTSHORTCUTS na 1, która produkowała nie reklamowane skróty. To omija błędy ICE43, ponieważ reklamowany skrót może używać pliku jako ścieżki klawiatury. Ponieważ DISABLEADVTSHORTCUTS został ustawiony Instalator Windows zastąpi te reklamowane skróty zwykłe skróty.

Ustawiłem atrybut elementu pakietu InstallScope na "perMachine". Ustawia właściwość ALLUSERS na 1. Wartości ProgramMenuFolder i DesktopFolder zostaną następnie przeniesione do profilu wszystkich użytkowników.

Dla folderów utworzonych pod ProgramMenuFolder istnieje element RemoveFolder i RegistryValue. Przykłady, które widziałem (ex1, ex2 ) używa HKCU jako głównego elementu RegistryValue. Zmieniłem ten root na HKMU który zmienia się na HKCU lub HKLM w zależności od wartości ALLUSERÓW.

W skrócie, z DISABLEADVTSHORTCUTS ustawionym na 1 twoje reklamowane skróty nie spowodują błędów ICE, ale zostaną przekonwertowane na nie reklamowane skróty po zainstalowaniu. RegistryValue z root HKMU jest w porządku dla ścieżki klawiatury, o ile nie jest to ścieżka klawiatury dla nie reklamowanego skrótu.

<?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>
 103
Author: mcdon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-29 19:03:38

Chociaż ten post jest dość stary, zawiera całkiem przydatne informacje i wygląda nadal aktywny. Chcę podkreślić, że w ogóle nie potrzebujesz atrapy klucza rejestru do skrótu! AFAIK to jest samouczek WiX i nie jest to MSI ani wymóg certyfikacji. Oto przykład bez klucza 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>

Zauważ, że spowoduje to umieszczenie Twojego skrótu razem z programem wykonywalnym w jednym komponencie. Jeśli to przeszkadza, a następnie użyć atrapy klucza rejestru (jak w bardzo dobrze wyjaśnione akceptowane ja odpowiedź).

 5
Author: zzz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-25 01:33:58

[[1]}Spójrz na z MSI na WiX, Część 10 - skróty autorstwa Alexa Szewczuka.

Lub post na blogu Roba Menchinga Jak utworzyć skrót odinstalowania (i przejść wszystkie walidacje ICE).

Zasadniczo ICE57 jest dość irytujące... ale oto (chyba działa) kod, którego używam do skrótów na pulpicie:)

<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>
 2
Author: saschabeaumont,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-01 22:21:18