【问题标题】:WiX Installer : Single Package Authoring (per machine : not installing in program files)WiX 安装程序:单包创作(每台机器:不安装在程序文件中)
【发布时间】:2015-10-19 19:29:02
【问题描述】:

我有以下我为单包创作编写的 Wix XML 代码。问题是当在 UI(WixUI_Advanced) 中选择“为此机器的所有底层安装”模式时,UI 中显示的默认位置是“C:\Users\XXXX\AppData\本地\程序\MyApp\"。 如何更改此设置,使默认位置为 ..\Program Files (x86)\MyApp....

如果我改变<Property Id="MSIINSTALLPERUSER" Value=" "/>, 那么默认位置是 ..\Program Files(x86)..,但由于缺乏管理员权限,每个用户都无法工作。

非常感谢。

<Wix    xmlns="http://schemas.microsoft.com/wix/2006/wi"
        xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"
        xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">


    <!--Product Information-->
    <Product Id="*"
               Name="$(var.ApplicationName)"
               Language="1033"  Version="!(bind.FileVersion.$(var.ExecutableName))"  Manufacturer="$(var.ManufacturerName)"
               UpgradeCode="33bc2348-****-****-****-ebcde0d14afe">

        <!--MSI Package Information-->
        <Package InstallerVersion="500"
                   Compressed="yes" />


        <!--Single Package Authoring-->
        <Property Id="MSIINSTALLPERUSER" Value="1"/>
        <Property Id="ALLUSERS" Value="2"/>

        <!--Upgrade Information-->
        <MajorUpgrade DowngradeErrorMessage="A newer version of $(var.ApplicationName) is already installed." />

        <MediaTemplate EmbedCab="yes" />

        <!--Application Features-->
        <Feature Id="CoreFeature" Title="$(var.ApplicationName)" Level="1">
              <ComponentGroupRef Id="ProductComponents" />
              <ComponentRef Id="ApplicationShortcut" />
              <ComponentRef Id="RegisterApplicationAutoStart" />
        </Feature>

        <!--Required .NET Framework for the Application-->
        <PropertyRef Id="NETFRAMEWORK35" />
        <Condition Message="This application requires Microsoft .NET Framework 3.5 or greater. Please install the .NET Framework then run this installer again.">
            <![CDATA[Installed OR NETFRAMEWORK35]]>
        </Condition>

        <!--Advanced UI-->
        <Property Id="ApplicationFolderName" Value="$(var.ApplicationName)" />
        <Property Id="WixAppFolder"          Value="WixPerMachineFolder" />

        <UIRef Id="WixUI_Advanced"/>

        <InstallExecuteSequence>
                  <Custom Action="LaunchApplication" After="InstallFinalize">NOT Installed</Custom>     
        </InstallExecuteSequence>

    </Product>


    <Fragment>
        <!-- Define the Target Directory.  The individual files will be filled in via a Heat generated fragment. -->
      <Directory Id="TARGETDIR" Name="SourceDir">
        <!--Define the directory when the application will be installed-->
          <Directory Id="ProgramFilesFolder">
                <Directory Id="APPLICATIONFOLDER" Name="$(var.ApplicationName)" />
          </Directory>
    </Fragment>


    <Fragment>
        <Component Id="RegisterApplicationAutoStart" Directory="ApplicationProgramsFolder" Guid="*">
            <RegistryValue Root="HKMU"
                             Key="Software\Microsoft\Windows\CurrentVersion\Run"
                             Name="$(var.ApplicationName)"
                             Type="string"
                             Value="[APPLICATIONFOLDER]$(var.ExecutableName)"
                             KeyPath="yes" />
        </Component>
    </Fragment>

</Wix>

【问题讨论】:

    标签: wix


    【解决方案1】:

    如果您想安装到 Program Files 文件夹,那么您需要是管理员。受限用户无法在该文件夹中创建或更新文件,并且运行 MSI 安装不会仅仅因为它是安装而破坏安全性。所以答案是你不能安装到 ProgramFiles,除非你让 MSI 要求提升权限。您的问题本质上是“有限的用户如何通过在 Program Files 文件夹中添加或替换文件来破坏安全性”,没有办法回答这个问题。

    您的应用是否需要提升权限才能运行?它有海拔表现吗?如果答案是肯定的,那么我怀疑您坚持要求还需要提升权限才能安装它。

    【讨论】:

    • 我是安装此应用程序的机器上的管理员。我的应用不需要提升权限即可运行,也没有提升清单。当 它安装到 C:\Program Files (x86) 但无法为每个用户安装当 它安装到C:\Users\XXXX\AppData\Local\Programs\MyApp\。并且为每个用户安装都很好当我查看安装程序的日志文件时,我看到 APPLICATIONFOLDER 被初始化为如上所述的不同值。
    【解决方案2】:

    请点击以下链接 http://wixtoolset.org/documentation/manual/v3/wixui/dialog_reference/wixui_advanced.html

    对于每台机器安装,默认安装位置是

    [ProgramFilesFolder][ApplicationFolderName] 
    

    并且用户将能够在设置 UI 中更改它。

    对于每用户安装,默认安装位置为

    [LocalAppDataFolder]Apps[ApplicationFolderName] 
    

    并且用户将在设置 UI 中无法更改

    您可以将每个用户设置为 0 以强制每台机器安装 - 或在程序文件中

    <WixVariable Id="WixUISupportPerUser" Value="0" />
    

    对于每台机器的安装,您需要管理员权限,如果用户没有管理员权限,他只能访问他的本地应用程序数据文件夹,因此无法更改该位置。

    【讨论】:

    • 我的问题是,每台机器的安装没有发生在 [[ProgramFilesFolder][ApplicationFolderName],而是发生在
    • 感谢您的回复。我的问题是,每台机器的安装没有发生在 [ProgramFilesFolder][ApplicationFolderName],而是发生在 C:\Users\\AppData\Local\Programs。我无法弄清楚为什么这个默认 pah 会被更改。用户可以更改此路径,但如果他不更改,则它会安装在上述文件夹中,其他标准用户无法访问。
    【解决方案3】:

    我在 WiX 安装程序中包含以下行来解决我的问题。

     <SetDirectory Id="ProgramFilesFolder" Value="C:\Program Files (x86)\"></SetDirectory>
    

    这将每台机器安装时设置为 C:\Users\XXX\AppData\Local..... 的 ProgramFilesFolder 的值更改为 C:\Program Files (x86)。

    此外,上述代码行对每个用户的安装没有任何影响,并且安装仅发生在该用户文件夹中(根据需要)。

    【讨论】:

      【解决方案4】:

      OP 完美地描述了它。通过以下方式启用单一创作,似乎无法在C:\Program Files (x86)\ 获得“实际”ProgramFilesFolder

      <Package InstallerVersion="200" ... /> <!-- do not specify InstallScope or InstallPrivileges! -->
      <Property Id="ALLUSERS" Value="2" />
      <Property Id="MSIINSTALLPERUSER" Value="1" />
      

      即使MSIINSTALLPERUSER 被重置,这不会改变ProgramFilesFolder 的值,它仍然是C:\Users\XXX\AppData\Local\Programs(我假设文件夹在安装程序启动时通过SHGetFolderPath 初始化,此后不会更改)。

      我想像 OP 在他的回答中显示的那样设置ProgramFilesFolderexplicitly 会起作用,但这是一个丑陋的黑客。最后对我有用的是从“perMachine”模式开始:

      <Property Id="ALLUSERS" Value="2" />
      <Property Id="MSIINSTALLPERUSER" />
      

      之后,如果安装程序选择“perUser”模式,我会相应地设置变量:

      <Publish Dialog="MyWelcomeDlg" Control="Next" Property="MSIINSTALLPERUSER" Value="1">1</Publish>
      <Publish Dialog="MyWelcomeDlg" Control="Next" Property="ALLUSERS" Value="{}">1</Publish>
      

      这样,文件夹将被正确设置。

      我认为根本问题是ProgramFilesFolder永远 设置为AppData 中的某个值,这几乎没有意义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-20
        • 1970-01-01
        • 2012-06-21
        相关资源
        最近更新 更多