如果双重用途软件包默认为每台计算机,则每个用户的安装始终需要管理员权限。

3
我正在尝试使用WiX创建一个双重用途的MSI文件。我已经按照WixUI_AdvancedSingle Package Authoring的说明进行了操作。当我默认使用每个用户安装(MSIINSTALLPERUSER=1)并允许用户选择每台机器安装时,这似乎运行良好。然而,将其设置为默认每台机器安装(MSIINSTALLPERUSER为空)始终会导致UAC提示,即使用户选择每个用户安装。每个用户的安装只是将单个文件写入非管理员目录,绝对不需要提升权限。
我也尝试了遵循this guide,这是每个人都在使用的WiX单包作者指南,但结果完全相同。如果选择每台计算机作为默认设置并选择每个用户,则会出现UAC提示,但如果选择每个用户作为默认设置并选择每个用户,则不会出现提示。
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="DE75C3B3-6398-4F25-9048-FB7EEE5F6EBF" Name="MyApp" Language="1033" Version="1.0.0" Manufacturer="Company" UpgradeCode="ED573078-CC3E-4299-9E04-043B1EDC08DB">
        <Package InstallerVersion="500" Compressed="yes" />
        <!--Single Package Authoring-->
        <Property Id="MSIINSTALLPERUSER" Secure="yes" Value="{}"/>
        <Property Id="ALLUSERS" Secure="yes" Value="2"/>

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate EmbedCab="yes" CabinetTemplate="arc{0}" CompressionLevel="high"/>
        <Feature Id="ProductFeature" Title="MyApp" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
        <UI>
            <UIRef Id="WixUI_Advanced" />
        </UI>
        <Property Id="ApplicationFolderName" Value="MyApp" />
        <Property Id="WixAppFolder" Value="WixPerMachineFolder" />

    </Product>

    <Fragment>
      <Directory Id="TARGETDIR" Name="SourceDir">
          <Directory Id="ProgramFiles64Folder" Name="PFiles">
              <Directory Id="APPLICATIONFOLDER" Name="MyApp">
              </Directory>
          </Directory>
      </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="APPLICATIONFOLDER">
            <Component Id="MyApp.exe" Guid="903EDAFD-F513-407D-85A0-D737013B9B57">
                <File Id="MyApp.exe" Source="MyApp.exe" KeyPath="yes" Checksum="yes"/>
            </Component>
        </ComponentGroup>
    </Fragment>
</Wix>

我查看了安装日志,发现以下条目:

Product not registered: beginning first-time install
PROPERTY CHANGE: Modifying ALLUSERS property. Its current value is '2'. Its new value: '1'.
PROPERTY CHANGE: Deleting MSIINSTALLPERUSER property. Its current value is '{}'.
...
Action: InstallScopeDlg. Dialog created
PROPERTY CHANGE: Modifying WixAppFolder property. Its current value is 'WixPerMachineFolder'. Its new value: 'WixPerUserFolder'.
PROPERTY CHANGE: Deleting ALLUSERS property. Its current value is '1'.
...
Product not registered: beginning first-time install
PROPERTY CHANGE: Deleting ALLUSERS property. Its current value is '2'.
PROPERTY CHANGE: Deleting MSIINSTALLPERUSER property. Its current value is '{}'.
2个回答

3

根据安装日志,我尝试重新引入《此指南》中修改的WixUI文件中替换的行,这些行更新了ALLUSERS属性。看起来像是为每个用户安装设置了一个值为1的提示,这可以解释为什么会弹出UAC提示。同时拥有来自俄罗斯博客和原始WixUI_Advanced的以下两行似乎确实起作用。

<Publish Dialog="InstallScopeDlg" Control="Next" Property="ALLUSERS" Value="{}" Order="2">
    WixAppFolder = "WixPerUserFolder"
</Publish>
<Publish Dialog="InstallScopeDlg" Control="Next" Property="ALLUSERS" Value="1" Order="3">
    WixAppFolder = "WixPerMachineFolder"
</Publish>
<Publish Dialog="InstallScopeDlg" Control="Next" Property="MSIINSTALLPERUSER" Value="1" Order="3">
    WixAppFolder = "WixPerUserFolder"
</Publish>
<Publish Dialog="InstallScopeDlg" Control="Next" Property="MSIINSTALLPERUSER" Value="{}" Order="2">
    WixAppFolder = "WixPerMachineFolder"
</Publish>

看起来似乎需要根据用户的选择设置ALLUSERSMSIINSTALLPERUSER,以允许在默认情况下进行机器级别安装时不需要管理员权限进行安装。然而,我找不到其他在线资料来确认我的发现。


通过更改上述代码,单作者打包的安装程序是否可以工作? - Swetha

1

在使用WixUI_Advanced UI时,有三个属性可用于控制默认安装范围:'ALLUSERS'、'Privileged'和'MSIINSTALLPERUSER'。

属性'WixAppFolder'将控制单击“高级”按钮时默认选择哪个单选按钮。

而且,wix存在一个已知的bug需要解决:https://github.com/wixtoolset/issues/issues/2376

总之,wix配置可以是:

  • 每个用户

    <Property Id='WixAppFolder' Value='WixPerUserFolder' />
    <Property Id='ALLUSERS' Value='2' />
    <Property Id='Privileged' Value='0' />
    <Property Id='MSIINSTALLPERUSER' Value='1' />
    <UI>
        <UIRef Id='WixUI_Advanced' />
        <UIRef Id='WixUI_ErrorProgressText' />
        <Publish Dialog='InstallScopeDlg' Control='Next' Property='MSIINSTALLPERUSER' Value='1' Order='3'>WixAppFolder = "WixPerUserFolder"
        <Publish Dialog='InstallScopeDlg' Control='Next' Property='MSIINSTALLPERUSER' Value='{}' Order='2'>WixAppFolder = "WixPerMachineFolder"
        <Publish Dialog='InstallScopeDlg' Control='Next' Event='DoAction' Value='WixSetDefaultPerMachineFolder' Order='3'>WixAppFolder = "WixPerMachineFolder"
        <Publish Dialog='InstallScopeDlg' Control='Next' Event='DoAction' Value='WixSetDefaultPerUserFolder' Order='3'>WixAppFolder = "WixPerUserFolder"
    </UI>

  • 每台机器

    <Property Id='WixAppFolder' Value='WixPerMachineFolder' />
    <Property Id='ALLUSERS' Value='1' />
    <Property Id='Privileged' Value='1' />
    <Property Id='MSIINSTALLPERUSER' Value='0' />
    <UI>
        <UIRef Id='WixUI_Advanced' />
        <UIRef Id='WixUI_ErrorProgressText' />
        <Publish Dialog='InstallScopeDlg' Control='Next' Property='MSIINSTALLPERUSER' Value='1' Order='3'>WixAppFolder = "WixPerUserFolder"
        <Publish Dialog='InstallScopeDlg' Control='Next' Property='MSIINSTALLPERUSER' Value='{}' Order='2'>WixAppFolder = "WixPerMachineFolder"
        <Publish Dialog='InstallScopeDlg' Control='Next' Event='DoAction' Value='WixSetDefaultPerMachineFolder' Order='3'>WixAppFolder = "WixPerMachineFolder"
        <Publish Dialog='InstallScopeDlg' Control='Next' Event='DoAction' Value='WixSetDefaultPerUserFolder' Order='3'>WixAppFolder = "WixPerUserFolder"
    </UI>

顺便说一下,我创建了一个项目来简化wix的配置。希望它能有所帮助:https://github.com/xinnj/WiXCover


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接