2009-04-15 17 views
9

Estoy creando un archivo instalador msi utilizando el kit de herramientas XML de Windows Installer. Al instalar el archivo msi creado, un acceso directo ubicado debajo de la carpeta ProgramMenuFolder da como resultado un atajo para el usuario Administrador solamente. ¿Cómo dejo que el instalador cree un atajo en el perfil Todos los usuarios, para que todos en la máquina tengan acceso directo? el blog de¿Cómo instalar atajos de programa para todos los usuarios?

Respuesta

4

Stuart Preston tiene una buena descripción de cómo hacer esto:

Installing a shortcut for "All Users" (via Wayback Machine)

Editar:

Los Synopsys es:

En el archivo .wxs, incluye lo siguiente:

<Property Id="ALLUSERS"><![CDATA[2]]></Property> 

Esto preconfigurará una propiedad que imita el comportamiento de seleccionar los "Todos los usuarios" en lugar de "Just Me" para su instalación. Usted necesita una estructura de directorios similar al siguiente también:

<Directory Id='ProgramMenuFolder' Name='PMenu' LongName='Programs'> 
<Directory Id='MyProductShortcutDir' Name='MyPMenu' LongName='MyProduct' /> 
</Directory> 

Por último, el acceso directo debe estar dentro de un elemento de "Archivo", de la siguiente manera:

<File Id="MyProduct.File0" LongName="MyProduct.exe" Name="MYPROD_1.EXE" src="c:\MyProductSourceFolder\MyProduct.exe" > 
<Shortcut Id="MyProduct.Shortcut" Directory="MyProductShortcutDir" Name="MPSCUT" LongName="My Product Shortcut" /> 
</File> 
17

En el Package element, agregue un atributo InstallScope como este:

InstallScope='perMachine' 
+0

Cuando lo hace, no tiene que preocuparse por la propiedad ALLUSERS. Si se configura InstallScope en 'perMachine' automáticamente se establece ALLUSERS en 1. – RaceRalph

0

Defina ALLUSERS = 1 simple para forzar una instalación por máquina .

<Property Id="ALLUSERS"><![CDATA[1]]></Property> 
+2

Debe usar InstallScope = 'perMachine' en su lugar –

+0

¿No es eso lo que establece la propiedad ALLUSERS de todos modos? Al menos eso es lo que se indica en la documentación. – saschabeaumont

9

Sobre la base de los SampleFirst.wxs en el WIX Tutorial http://www.tramontana.co.hu/wix/lesson1.php había dos partes que he cambiado.

Primero, agregue la propiedad ALLUERS = 1 "". Eso instala el acceso directo al perfil de todos los usuarios como otros han notado.

En segundo lugar, cambie la raíz del valor de registro para Component 'ProgramMenuDir' a HKMU. El instalador decidirá si debe usar HKLM (Máquina local) o HKCU (Usuario actual) en el momento de la instalación, en función de la propiedad ALLUSERS.

Debería poder agregar cuadros de diálogo para modificar la propiedad ALLUSERS, con la raíz del registro cambiando en consecuencia.

<?xml version="1.0" encoding="utf-8"?> 
<!-- Original Source available at "http://www.tramontana.co.hu/wix/download.php?file=samples/samplefirst.zip&type=application/zip" 
    This version has been modified for a local machine install (all users) vs a user install--> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Name="Foobar 1.0" Id="YOURGUID-CD32-4B20-BB4F-58A5C3B21A7C" UpgradeCode="YOURGUID-EDCE-42A2-9DA2-59FB08AC4FA6" 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" /> 
     <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="ALLUSERS" 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-2191-4A98-806B-2554B0DD8FC3"> 
          <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-7BA7-4BD1-90B9-C0DFC21674B1"> 
          <File Id="HelperDLL" Name="Helper.dll" DiskId="1" Source="Helper.dll" KeyPath="yes" /> 
         </Component> 
         <Component Id="Manual" Guid="YOURGUID-F60A-48D6-83FD-44ED01AA579A"> 
          <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-2D4F-443F-9ADA-563DB3C1581F"> 
         <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" /> 
     <UI /> 
    </Product> 
</Wix> 
+1

'HKMU' era aparentemente el hechizo mágico que necesitaba hoy! –

1

Bob Arnson tiene un blog entry que trata sobre cómo definir usuario contra la máquina en Wix.
La respuesta rápida es establecer el atributo InstallScope del elemento Package en "perMachine".

Cuestiones relacionadas